"find -exec mv"は以前に移動されたのと同じファイルを移動しようとします。

私の間違ったコマンド:

find . -type f -name '*2019*' -exec mv {} ./backup_2019 \;

結果:

mv: ‘./backup_2019/2019-A.txt’ and ‘backup_2019/2019-A.txt’ are the same file
mv: ‘./backup_2019/2019-B.txt’ and ‘backup_2019/2019-B.txt’ are the same file
mv: ‘./backup_2019/2019-C.txt’ and ‘backup_2019/2019-C.txt’ are the same file

以前に移動したファイルを見つけたと思います。 MaxDeepthを使用せずにこの問題を解決できますか?ターゲットディレクトリのみを除外する方法はありますか?

ベストアンサー1

除外するターゲットディレクトリを無視する必要があります。

find . -path './backup_2019' -prune -o -type f -name '*2019*' -exec mv {} ./backup_2019 \;

演算子間の暗黙的なANDは-oOR()よりも密接に関連付けられているため、次のように変換されます。(パスが一致する場合はスキップ./backup_2019)または(mv一致するファイルがある場合*2019*

おすすめ記事