たとえば、100個のフォルダがあり、各フォルダにはJPGファイルとMOVファイルがあります。すべてのjpgファイルを1つのフォルダにコピーし、すべてのmovファイルを別のフォルダにコピーしたいと思います。
はい
folder1
あります。one.jpg
two.jpg
one.mov
folder2
そこtwo2.jpg
と two2.movfolder3
xxx.jpg
ありyyy.mov
希望する結果
フォルダ
jpgfiles
には次のものが含まれています。one.jpg
two.jpg
two2.jpg
xxx.jpg
フォルダ
movfiles
には次のものが含まれています。one.mov
two2.mov
yyy.mov
答え1
これにはクエリを使用できます。フォルダ1、フォルダ2など、上記のフォルダを使用し、そこからこれらのコマンドを実行します。
find /folder/ -type f -name "*.jpg" -exec cp {} "jpgfiles/" +
find /folder/ -type f -name "*.mov" -exec cp {} "movfiles/" +
/folder/
以下は親フォルダです。親フォルダに変更する必要があります。
編集:これを指摘してくれた@godlygeekに感謝します。一意のファイルのみをコピーするには、次のコマンドを使用できます。
find /folder/ -type f -name "*.jpg" -exec bash -c 'test ! -f jpgfiles/${0##*/} && { cp $0 jpgfiles/${0##*/}; }' {} +
find /folder/ -type f -name "*.mov" -exec bash -c 'test ! -f movfiles/${0##*/} && { cp $0 movfiles/${0##*/}; }' {} +
一意のファイルサフィックスを持つ競合するファイルをコピーするには、次の手順を実行します。
find /folder/ -type f -name "*.jpg" -exec bash -c 'test -f jpgfiles/${0##*/} && { cp $0 jpgfiles/${0##*/}.$RANDOM; }' {} +
find /folder/ -type f -name "*.mov" -exec bash -c 'test -f movfiles/${0##*/} && { cp $0 movfiles/${0##*/}.$RANDOM; }' {} +