我正在尝试将某些文件从一个目录复制到另一个目录。使用此命令
find "$HOME" -name '*.txt' -type f -print0 | xargs -0 cp -t $HOME/newdir
我收到一条警告消息:
cp: '/home/me/newdir/logfile.txt' 和 '/home/me/newdir/logfile.txt' 是同一个文件
如何避免出现此警告消息?
问题在于您尝试将文件复制到自身。您可以通过从 find 命令的结果中排除目标目录来避免这种情况,如下所示:
find "$HOME" -name '*.txt' -type f -not -path "$HOME/newdir/*" -print0 | xargs -0 cp -t "$HOME/newdir"
尝试使用
install
代替。这将通过先删除文件来代替。
install -v target/release/dynnsd-client target/
removed 'target/dynnsd-client'
'target/release/dynnsd-client' -> 'target/dynnsd-client'
然后删除源文件。
在此过程中使其独一无二。但这需要排序
find "$HOME" -name '*.txt' -type f -print0 | sort -zu | xargs -0 cp -t "$HOME/newdir"
或者如果与生成的文件无关,请尝试使用
-u
的cp
选项。
find "$HOME" -name '*.txt' -type f -print0 | xargs -0 cp -ut "$HOME/newdir"
-u 仅当源文件比目标文件新或当 目标文件丢失
尝试使用
rsync
代替 cp
:
find "$HOME" -name "*.txt" -exec rsync {} "$HOME"/newdir \;
安装
在 Makefile 上下文中与 docker 完美配合 - 谢谢!
copy:
@echo ''
bash -c 'install -v ./docker/shell .'
bash -c 'install -v ./docker/docker-compose.yml .'
bash -c 'install -v ./docker/statoshi .'
bash -c 'install -v ./docker/gui .'
bash -c 'install -v ./docker/$(DOCKERFILE) .'
bash -c 'install -v ./docker/$(DOCKERFILE_SLIM) .'
bash -c 'install -v ./docker/$(DOCKERFILE_GUI) .'
bash -c 'install -v ./docker/$(DOCKERFILE_EXTRACT) .'
@echo ''
build-shell: copy
docker-compose build shell