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?

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.


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 {} +
    

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.


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).

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.