特定のファイルを別のディレクトリにコピー

特定のファイルを別のディレクトリにコピー

特定の拡張子を持つファイルを見つけて、別のハードドライブ/ディレクトリにコピーまたは再同期しようとしています。

sudo find . \( -type f \( -iname '*.jpg' -o -iname "*png" -o -iname "*mov" -o -iname "*mp3" -o -iname "*mp4" -o -iname "*swf" -o -iname "*avi" \) -exec rsync {} ~/test/dest/ \; \)

シェル出力は次のとおりです。

cp: './dest/DSC_0085.JPG' and '/home/sanz/test/dest/DSC_0085.JPG' are the same file
cp: './dest/DSC_0086.avi' and '/home/sanz/test/dest/DSC_0086.avi' are the same file

など...

コピーしているファイルとコピーする場所が異なるディレクトリにあるにもかかわらず、同じファイルであることを伝え続けるのはなぜですか?これは言葉ではありません。

また、コマンドのさまざまなバリエーションを試していますが、必要に応じて機能しません。

sudo find . -type f -iname '*.jpg' -o -name "*png" -o -name "*mov" -o -name "*mp3" -o -name "*mp4" -o -name "*swf" -o -name "*avi" -exec rsync -ah --progress {} ~/test/dest \;

aviファイルのみをコピーし、他のファイルは完全に無視します。私にとって奇妙なことは、-execを持たない同じコマンドは通常、特にタグ付けされたすべてのファイルを出力しますが、コピーコマンドで使用するにはaviファイルのみを読み取るかコピーすることです。

ベストアンサー1

コマンドを実行すると、 で識別されたサブディレクトリを/home/sanz/test含む、ファイルのどこにでも指定された名前のファイルを探します。destこれは同じディレクトリなので、実際にはディレクトリとファイルを自分自身にコピーしようとしています。find./dest~/test/dest//home/sanz/test/dest/

/home/sanz/testその中にあるファイルを見つけてコピーするには、除外オプションを使用する必要が~/test/destあります。-prune/home/sanz/test/dest

sudo find . -path ./dest -prune -o \( -type f \( -iname '*.jpg' -o -iname "*png" -o -iname "*mov" -o -iname "*mp3" -o -iname "*mp4" -o -iname "*swf" -o -iname "*avi" \) -exec rsync {} ~/test/dest/ \; \)

おすすめ記事