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
検索出力をディレクトリ名に切り捨て、重複エントリを削除します。最後に、欠落しているファイルを作成しながらフォルダを繰り返します。sort
uniq
cp -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