web-dev-qa-db-ja.com

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'は同じファイルです

この警告メッセージを回避する方法は?

23
Matkrupp

問題は、ファイルを自分自身にコピーしようとすることです。次のように、findコマンドの結果から宛先ディレクトリを除外することで、これを回避できます。

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

プロセスでそれをユニークにします。しかし、これにはソートが必要です

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コピーするのは、SOURCEファイルが宛先ファイルよりも新しい場合、または
宛先ファイルが欠落している場合のみです
1
konsolebox

代わりにinstallを使用してみてください。これにより、最初にファイルが削除されます。

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

そして、ソースファイルを削除します

0
teknopaul