Salin file secara rekursif dari satu direktori ke direktori lainnya

11

Saya memiliki semua musik saya di folder /media/kalenpw/MyBook/Music/ABunchOfOtherFoldersWithFilesInside. Saya ingin menyalin semua mp3 /media/kalenpw/HDD/Musicjadi saya menggunakan:

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

namun ini hanya menyalin mp3 di folder musik root dan tidak membuka subdirektori artis dan menyalin file-file itu.

Saya mendapat kesan -Rakan menyalin semua file secara rekursif. Bagaimana saya bisa mencapai tujuan tersebut?

kalenpw
sumber

Jawaban:

19

Menggunakan:

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

Alasan untuk perintah Anda tidak bekerja adalah bahwa nama-nama yang mengandung wildcard ( *.mp3) diperluas sebelum perintah dijalankan, jadi jika Anda memiliki tiga file ( 01.mp3, 02.mp3, 03.mp3) perintah yang efektif Anda adalah:

cp -R /media/kalenpw/MyBook/Music/01.mp3 /media/kalenpw/MyBook/Music/02.mp3 /media/kalenpw/MyBook/Music/03.mp3 /media/kalenpw/HDD/Music

Seperti yang Anda lihat -Rtidak berpengaruh dalam kasus ini.

techraf
sumber
Saya sarankan -inamedaripada -nameseandainya file berakhir .MP3.
Olathe
Terima kasih, ini berhasil. Atau setidaknya sedang dalam proses bekerja.
kalenpw
5

Anda telah secara spesifik menyebutkan file / direktori yang akan disalin menggunakan *.mp3mis. Nama file / direktori yang diakhiri .mp3.

Jadi file berakhiran .mp3di /media/kalenpw/MyBook/Music/direktori dan sama, setiap direktori berakhir di .mp3dalam /media/kalenpw/MyBook/Music/akan disalin, rekursif. Jika tidak ada file / direktori yang cocok, tidak ada yang akan disalin.

Sekarang untuk menyalin semua .mp3file dari /media/kalenpw/MyBook/Music/recursivley ke direktori /media/kalenpw/HDD/Music/:

  • Menggunakan bash:

    shopt -s globstar
    cp -at /media/kalenpw/HDD/Music /media/kalenpw/MyBook/Music/**/*.mp3
    
  • Menggunakan find:

    find /media/kalenpw/MyBook/Music -type f -name '*.mp3' -exec cp -at /media/kalenpw/HDD/Music {} +
    
heemayl
sumber
Terima kasih, techraf menjawab terlebih dahulu jadi saya menerima jawaban mereka.
kalenpw
1

Anda juga dapat menggunakan cpr :

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

Perhatikan bahwa tanpa -p cpr akan mempertahankan jalur direktori yang lengkap pada nama file yang disalin.
-rdapat digunakan (sebagai ganti -p) untuk mempertahankan jalur di bawah '/ media.../Music/'.
Juga cprakan berhati-hati bahwa tidak ada file yang ditimpa, menambahkan nomor mulai dari '0001' untuk setiap nama file yang disalin.

circulosmeos
sumber
0

Misalkan Anda memiliki banyak .docx, .mp3, .txtdan .xlsxfile yang tersimpan dalam struktur direktori ini:

/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/

... dan Anda ingin mengulang kembali ke semua direktori untuk menyalin semua .mp3file yang ditemukan /home/me/music/tetapi Anda tidak ingin menyimpan pohon direktori tersebut di tujuan (mis. Anda ingin semua .mp3file yang ditemukan disalin ke /home/me/music/alih-alih disalin ke direktori masing-masing seperti /home/me/music/dir1/, /home/me/music/dir1/dir11/dan lain-lain).

Dalam kasus seperti itu, di terminal shell (bash) pertama jalankan perintah ini untuk mengakses root pencarian file Anda:

cd /files

... dan kemudian jalankan perintah ini:

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

Jika anda tidak ingin melestarikan pohon direktori sumber di tujuan, menjalankan perintah ini bukan (setelah menjalankan cd /files):

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

Pada perintah di atas, pencarian adalah case-sensitive (yaitu pertandingan .mp3, .MP3, .mP3dan .Mp3). Gunakan -namealih-alih -inamejika Anda ingin pencarian menjadi case-sensitive (misalnya menggunakan -nameuntuk .mp3string karakter akan cocok dengan file yang diakhiri dengan .mp3tetapi tidak yang berakhir dengan .MP3, .mP3juga .Mp3).

Yuri Sucupira
sumber