我正在尝试将某些文件从一个目录复制到另一个目录。使用此命令
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 仅当源文件比目标文件新或当 目标文件丢失
安装
在 docker 的 Makefile 上下文中完美工作 - 谢谢!
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