あるディレクトリから別のディレクトリにファイルを再帰的にコピーする


11

すべての音楽をフォルダに入れています/media/kalenpw/MyBook/Music/ABunchOfOtherFoldersWithFilesInside。私はすべてのmp3をコピーしたい/media/kalenpw/HDD/Musicので使用しました:

cp -R /media/kalenpw/MyBook/Music/*.mp3 /media/kalenpw/HDD/Music

ただし、これはルートミュージックフォルダーのmp3のみをコピーし、アーティストのサブディレクトリを開かず、それらのファイルをコピーしませんでした。

私は-Rすべてのファイルを再帰的にコピーするという印象を受けていました。上記の目標を達成するにはどうすればよいですか?

回答:


19

使用する:

find /media/kalenpw/MyBook/Music/ -name '*.mp3' -exec cp {} /media/kalenpw/HDD/Music \;

あなたのコマンドで動作していない理由は、ワイルドカードを(含むこと名前である*.mp3あなたは3つのファイルを持っていたのであれば、実行されるコマンド前に展開されている)( 、01.mp302.mp303.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、この場合は効果がありません。


ファイルの末尾がの場合の-iname代わりに推奨-name.MP3ます。
オレーセ

これが働いてくれてありがとう。または、少なくとも作業中です。
kalenpw

5

を使用してコピー*.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 {} +
    

おかげで、テクラフが最初に答えたので、私は彼らの答えを受け入れました。
kalenpw

1

cprを使用することもできます。

$ cd /media/kalenpw/HDD/Music
$ cpr -p '/\.mp3$/' '/media/kalenpw/MyBook/Music/'

-p cprを使用しない場合、コピーされたファイル名の完全なディレクトリパスが保持されることに注意してください。
-r(/の代わりに-p)を使用して、「/ media ... / Music /」の下のパスを保持できます。
またcpr、ファイルが上書きされないように注意し、コピーされた繰り返しファイル名に「0001」で始まる番号を追加します。


0

あなたがの束を持っていると仮定し.docx.mp3.txtおよび.xlsxファイルは、このディレクトリ構造に保存されています:

/files/
/files/dir1/
/files/dir1/dir11/
/files/dir1/dir12/
/files/dir1/dir13/
/files/dir2/
/files/dir3/
/files/dir3/dir31/
/files/dir3/dir32/
/files/dir4/
/files/dir5/
/files/dir51/
/files/dir52/
/files/dir53/
/files/dir54/

...そして、あなたはすべての見つかっコピーするためにこのようなすべてのディレクトリに再帰したい.mp3のファイルを/home/me/music/しかし、あなたはないではないつまり、あなたがすべて見つけたい(先に、このようなディレクトリツリーを保持したい.mp3ファイルをにコピーする/home/me/music/代わりに、それぞれのディレクトリにコピーしますなど/home/me/music/dir1//home/me/music/dir1/dir11/エトセトラ)。

このような場合、ファイル検索のルートにアクセスするには、シェルターミナル(bash)で最初にこのコマンドを実行します。

cd /files

...そしてこのコマンドを実行します:

for i in `find . -iname '*.mp3'`; do cp $i /home/me/music/; done

場合は、あなたはない、先に元のディレクトリツリーを保存する(実行した後、代わりにこのコマンドを実行しますcd /files):

find . -iname '*.mp3' | cpio -pdm /home/me/music/

上記のコマンドでは、検索では大文字と小文字を区別しません(すなわちマッチ.mp3.MP3.mP3および.Mp3)。使用-nameの代わりに、-inameあなたが検索では、大文字と小文字が区別できるようにする場合(例えば使用する-nameため.mp3の文字列で終わるファイルにマッチします.mp3で終わるものをではなく.MP3.mP3.Mp3)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.