如何避免在Linux中使用cp时“是同一个文件”的警告信息?

我试图从一个目录复制某些文件到另一个。 使用这个命令

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" 

在过程中使其独特。 但是这需要排序

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

或者,如果不是关于生成的文件,请尝试使用cp-u选项。

 find "$HOME" -name '*.txt' -type f -print0 | xargs -0 cp -ut "$HOME/newdir" 
 -u仅当源文件比目标文件或时更新时复制
     目标文件丢失