特定のファイルをあるディレクトリから別のディレクトリにコピーしようとしています。このコマンドを使用する
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"
または、生成されたファイルに関するものでない場合は、-u
オプションcp
。
find "$HOME" -name '*.txt' -type f -print0 | xargs -0 cp -ut "$HOME/newdir"
-uコピーするのは、SOURCEファイルが宛先ファイルよりも新しい場合、または 宛先ファイルが欠落している場合のみです
代わりにinstall
を使用してみてください。これにより、最初にファイルが削除されます。
install -v target/release/dynnsd-client target/
removed 'target/dynnsd-client'
'target/release/dynnsd-client' -> 'target/dynnsd-client'
そして、ソースファイルを削除します