ファイルを一括移動する簡単な方法を作成しており、2つの方法を試しました。
#(1)
find . -name '*.pdf' | xargs -I{} mkdir pdfs; mv {} pdfs
#(2)
find . -name '*.pdf' -exec mv {} pdfs \+
最初の方法は驚くべきことに「時々」動作しましたが、PDFを含むフォルダを何度も削除してPDFを親ディレクトリに戻した後、突然動作が停止しました。
次のエラーが発生します。
mv: rename {} to pdfs: No such file or directory
xargs: unterminated quote
2番目の方法は次のエラーを生成します。
find: -exec: no terminating ";" or "+"
修正する:
私は次のように動作するようにしました。
find . -name '*.pdf' -exec mv "{}" pdfs \;
ただし、次のようにディレクトリを作成してファイルを1行に移動したい場合は機能しません。
find . -name '*.csv' -exec mkdir -p csvs && mv "{}" csvs \;
検索: -exec: ";"または「+」は終了しません。
ディレクトリを作成して移動する方法は?
ベストアンサー1
あなたの状況が本当に単純であると仮定すると(.pdfで終わるファイル)、
mv -- **/*.pdf pdfs/
します。
zshの場合、再帰的なglobはデフォルトで有効になっており、bashの場合はまず次のようにして**
有効にする必要があります。shopt -s globstar
あなたの find 呼び出しが実際に少し複雑になる可能性があると思います。ただし、特にzshを使用している場合、シェルの拡張ワイルドカード機能は非常に強力で、毎回動作する正しいMagic Findパラメータを覚えている手間を省きます。