find . -type f -iname "*.jpg" -exec cp {} JPG \;
シェルスクリプトを作成していますが、イメージファイルを新しいディレクトリにコピーするとエラーが発生します。are the same
答え1
このJPG
ディレクトリは現在ディレクトリにあります。再帰を使用して現在のディレクトリを検索していますfind
。つまり、JPG
名前が一致するすべてのファイル*.jpg
(大文字と小文字を区別しない)がそのファイル自体にコピーされます。
これを防ぐには、次のようにします。
find . -path ./JPG -prune -o -type f -iname '*.jpg' -exec cp {} ./JPG \;
JPG
これにより、ディレクトリが見つかるたびに検索ツリーからそのディレクトリが削除されます(つまり、検索対象とは見なされません)。
作業速度を上げるには、GNUがある場合はcp
次のようにします。
find . -path ./JPG -prune -o -type f -iname '*.jpg' -exec cp -t ./JPG {} +
これにより、cp
見つかった各ファイルに対して一度ではなく、一括して見つかったJPEGファイルが呼び出されます。
同様の効果を得るには一度だけ呼び出してくださいrsync
。
rsync -av --exclude=/JPG --include='*.jpg' --include='*/' --exclude='*' ./ ./JPG
(に*.jpg
変更しない限り、大文字と小文字を区別せず、一致しません。)--include='*.jpg'
--include='*.[jJ][pP][gG]'