ファイルを見つけて-execを使用して別のフォルダに移動します。

ファイルを見つけて-execを使用して別のフォルダに移動します。

ファイルを見つけて別のフォルダに移動してみました。

$ find ~ -iregex ".*cheat.*\.pdf" -exec mv "{}" cheatSheet +
find: missing argument to `-exec'

しかし、テストは動作します。

find ~ -iregex ".*cheat.*\.pdf" -exec echo {} +

私の使い方に問題がありますか?

ベストアンサー1

を使用する場合は、-exec ... {} +最後に{}、すぐ前に来る必要があります+

これはあなたが使用する必要があることを意味します

-exec mv -t cheatSheet {} +

これにはGNUへのアクセスが必要ですmv。 GNUがない場合は、mv次を使用します。

-exec mv {} cheatSheat \;

一度に1つのファイルを移動するか、

-exec sh -c 'mv "$@" cheatSheet' sh {} +

インラインスクリプトを呼び出して、すべてのファイルを一度に移動します。

あなたもそうではありません-iregex。以下の内容を読んで理解しやすくなります。

find "$HOME" -ipath '*cheat*.pdf' \
    -exec sh -c 'mv "$@" cheatSheet' sh {} +

あるいは、明確にするために、次のいずれかが実際に意味するものです(あなたがcheatそのグループの一部になりたいかどうかによって異なります)。ファイル名パスの終わり(最初の選択)または次のいずれかディレクトリ名パス(2番目のオプション)):

find "$HOME" -iname '*cheat*.pdf' \
    -exec sh -c 'mv "$@" cheatSheet' sh {} +

find "$HOME" -ipath '*cheat*/*' -iname '*.pdf' \
    -exec sh -c 'mv "$@" cheatSheet' sh {} +

これは-ipathGNUfind拡張ですが-iname標準ではありませんが、より一般的な実装です。

また、名前の競合が発生してファイル名がまったく同じ場合、他のファイルを移動する過程で移動されたファイルの一部を上書きすることにも注意する価値があります。 GNUを使用すると、オプション(既存のファイルを削除しない)またはオプション(既存のファイルの名前変更/バックアップ)をmv使用してこれを回避できます。-n-b

関連:

おすすめ記事