特定の拡張子を持つファイルを含むすべてのフォルダをコピーします。

特定の拡張子を持つファイルを含むすべてのフォルダをコピーします。

Mac端末で、指定された拡張子を持つ1つ以上のファイルを含むすべてのディレクトリを見つけて別の場所にコピーしたいと思います。ファイルを含むすべてのディレクトリをfind . -iname '*.jpg' -exec dirname {} \;探しているようですが、*.jpgファイルをコピーする方法がわかりません。使ってみましたが、rsyncうまくいきませんでした。最良のアプローチは何ですか?

ベストアンサー1

これはbash、ディレクトリ構造を維持しながらjpgを含むすべてのフォルダをバックアップと呼ばれるフォルダにコピーするフレンドリーな行です。

mkdir backup; for folder in $(find . -type f -name '*.jpg' | sed -r 's|/[^/]+$||' |sort |uniq); do cp -r --parents $folder backup; done

まず空のフォルダを作成し、次のbackupコマンドfindは 。で始まるファイルを検索し、.jpgコマンドはsed検索出力をディレクトリ名に切り捨て、重複エントリを削除します。最後に、欠落しているファイルを作成しながらフォルダを繰り返します。sortuniqcp -r --parents

このようなフラグをsed -r使用して-printfバイパスすることができます。find

mkdir backup; for folder in $(find . -type f -name '*.jpg' -printf "%h\n" |sort |uniq); do cp -r --parents $folder backup; done

findサポートしていない場合はお試し-printfください。grep

mkdir backup; for folder in $(find . -type f -name '*.jpg' | grep -o "\(.*\)/" |sort |uniq); do cp -r --parents $folder backup; done

おすすめ記事