すべての音楽をフォルダー/media/kalenpw/MyBook/Music/ABunchOfOtherFoldersWithFilesInside
に保管しています。すべてのmp3を/media/kalenpw/HDD/Music
にコピーしたいので、次を使用しました。
cp -R /media/kalenpw/MyBook/Music/*.mp3 /media/kalenpw/HDD/Music
ただし、これはルートミュージックフォルダーのmp3のみをコピーし、アーティストのサブディレクトリを開かず、それらのファイルをコピーしませんでした。
-R
はすべてのファイルを再帰的にコピーするという印象を受けました。上記の目標を達成するにはどうすればよいですか?
つかいます:
find /media/kalenpw/MyBook/Music/ -name '*.mp3' -exec cp {} /media/kalenpw/HDD/Music \;
コマンドが機能しない理由は、ワイルドカード(*.mp3
)を含む名前がコマンドの実行前に展開されるため、3つのファイル(01.mp3
、02.mp3
、03.mp3
)がある場合、有効なコマンドは
cp -R /media/kalenpw/MyBook/Music/01.mp3 /media/kalenpw/MyBook/Music/02.mp3 /media/kalenpw/MyBook/Music/03.mp3 /media/kalenpw/HDD/Music
ご覧のとおり、-R
はこの場合は効果がありません。
*.mp3
、つまり.mp3
で終わるファイル/ディレクトリ名を使用してコピーするファイル/ディレクトリについて特に言及しました。
したがって、.mp3
ディレクトリで/media/kalenpw/MyBook/Music/
で終わるファイル、および同様に、.mp3
で/media/kalenpw/MyBook/Music/
で終わるすべてのディレクトリが再帰的にコピーされます。そのような一致するファイル/ディレクトリがない場合、何もコピーされません。
次に、すべての.mp3
ファイルを/media/kalenpw/MyBook/Music/
recursivleyからディレクトリ/media/kalenpw/HDD/Music/
にコピーします。
bash
を使用:
shopt -s globstar
cp -at /media/kalenpw/HDD/Music /media/kalenpw/MyBook/Music/**/*.mp3
find
を使用:
find /media/kalenpw/MyBook/Music -type f -name '*.mp3' -exec cp -at /media/kalenpw/HDD/Music {} +