ツリーの下にファイルをコピーします。ただし、ターゲットのディレクトリは除いてファイルのみコピーします。

ツリーの下にファイルをコピーします。ただし、ターゲットのディレクトリは除いてファイルのみコピーします。

たとえば、100個のフォルダがあり、各フォルダにはJPGファイルとMOVファイルがあります。すべてのjpgファイルを1つのフォルダにコピーし、すべてのmovファイルを別のフォルダにコピーしたいと思います。

はい

  • folder1あります。one.jpgtwo.jpgone.mov

  • folder2そこtwo2.jpgと two2.mov

  • folder3xxx.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; }' {} +

関連情報