28

我正在尝试将某些文件从一个目录复制到另一个目录。使用此命令

find "$HOME" -name '*.txt' -type f -print0 | xargs -0 cp -t $HOME/newdir

我收到一条警告消息说

cp: '/home/me/newdir/logfile.txt' 和 '/home/me/newdir/logfile.txt' 是同一个文件

如何避免此警告信息?

4

4 回答 4

21

问题是您尝试将文件复制到自身。您可以通过从 find 命令的结果中排除目标目录来避免它,如下所示:

find "$HOME" -name '*.txt' -type f -not -path "$HOME/newdir/*" -print0 | xargs -0 cp -t "$HOME/newdir" 
于 2013-08-09T19:17:47.863 回答
2

尝试install改用,这会通过首先删除文件来代替。

install -v target/release/dynnsd-client target/
removed 'target/dynnsd-client'
'target/release/dynnsd-client' -> 'target/dynnsd-client'

然后删除源文件

于 2020-03-08T17:21:44.643 回答
1

让它在这个过程中独一无二。但这需要排序

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 仅当源文件比目标文件新或当
     目标文件丢失
于 2013-08-09T19:11:35.330 回答
1

安装

在 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  
于 2020-07-11T08:48:58.300 回答