在 Linux 中使用 cp 时如何避免“相同文件”警告消息?

问题描述 投票:0回答:5

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

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

我收到一条警告消息:

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

如何避免出现此警告消息?

linux bash copy cp
5个回答
24
投票

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

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

2
投票

尝试使用

install
代替。这将通过先删除文件来代替。

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

然后删除源文件。


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 仅当源文件比目标文件新或当
     目标文件丢失

1
投票

尝试使用

rsync
代替
cp
:

find "$HOME" -name "*.txt" -exec rsync {} "$HOME"/newdir \;

0
投票

安装

在 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  
© www.soinside.com 2019 - 2024. All rights reserved.