Dosyaları bir dizinden diğerine özyineli olarak kopyalama


11

Tüm müziklerim bir klasörde /media/kalenpw/MyBook/Music/ABunchOfOtherFoldersWithFilesInside. Tüm mp3'leri kopyalamak istiyorum, /media/kalenpw/HDD/Musicböylece kullandım:

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

ancak bu yalnızca kök müzik klasöründeki mp3'leri kopyaladı ve sanatçı alt dizinlerinden hiçbirini açmadı ve bu dosyaları kopyalamadı.

Ben izlenim altında oldu -Rtüm dosyaları özyinelemeli kopyalar. Bu hedefe nasıl ulaşabilirim?

Yanıtlar:


20

kullanın:

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

Emriniz çalışmıyor nedeni joker (içeren bu isimleri *.mp3size üç dosya vardı eğer öyleyse, çalıştırılan komutun önce genişletilir) ( 01.mp3, 02.mp3, 03.mp3) sizin etkili komut oldu:

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

Gördüğünüz gibi -Rbu durumda hiçbir etkisi yoktur.


Ben tavsiye -inameyerine -namedurumunda herhangi dosyalar sona .MP3.
Olathe

Teşekkür ederim bu işe yaradı. Ya da en azından çalışma sürecinde.
kalenpw

5

Kopyalanacak dosya (lar) dan / dizinlerden, *.mp3yani biten herhangi bir dosya / dizin adı kullanılarak özel olarak bahsettiniz .mp3.

Yani biten herhangi bir dosya .mp3içinde /media/kalenpw/MyBook/Music/dizin ve benzer şekilde biten herhangi bir dizin .mp3içinde /media/kalenpw/MyBook/Music/yinelemeli, kopyalanacaktır. Eşleşen bir dosya / dizin yoksa hiçbir şey kopyalanmaz.

Şimdi tüm .mp3dosyaları /media/kalenpw/MyBook/Music/recursivley'den dizine kopyalamak için /media/kalenpw/HDD/Music/:

  • Kullanma bash:

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

    find /media/kalenpw/MyBook/Music -type f -name '*.mp3' -exec cp -at /media/kalenpw/HDD/Music {} +
    

Teşekkürler, önce techraf cevap verdi, ancak cevaplarını kabul ettim.
kalenpw

1

Ayrıca cpr kullanabilirsiniz :

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

-p Cpr olmadan kopyalanan dosya adlarındaki tam dizin yollarını koruyacağını unutmayın . '/media.../Music/' altındaki yolu korumak için
-r(yerine -p) kullanılabilir .
Ayrıca cprkopyalanan tekrarlanan dosya adına '0001' ile başlayan bir sayı ekleyerek hiçbir dosyanın üzerine yazılmamasına dikkat edecektir.


1

Eğer bir grup var olduğunu varsayalım .docx, .mp3, .txtve .xlsxbu dizin yapısında depolanan dosyalar:

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

... ve tüm bulundu kopyalamak için bu tür tüm dizinlere içine recurse istediğiniz .mp3dosyaları /home/me/music/ama do not yani tüm bulunmasını istiyorum (hedef tür dizin ağacını korumak isteyen .mp3dosyaları kopyalanacak /home/me/music/yerine ilgili dizinlere kopyalanan gibi /home/me/music/dir1/, /home/me/music/dir1/dir11/ve saire).

Bu durumda, kabuk terminalinde (bash) dosya aramanızın köküne erişmek için önce bu komutu çalıştırın:

cd /files

... ve ardından şu komutu çalıştırın:

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

Eğer do , hedef kaynağın dizin ağacını korumak (çalıştırdıktan sonra yerine bu komutu çalıştırmak istediğiniz cd /files):

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

Yukarıdaki komutlar üzerinde arama küçük harfe duyarlı değildir (yani maçlar .mp3, .MP3, .mP3ve .Mp3). Kullanım -nameyerine -inamearama (kullanarak örneğin harf duyarlı olmasını istiyorsanız -nameiçin .mp3ile biten dosyalar demektir karakter dizesi .mp3değil biten olanlar .MP3, .mP3ne de .Mp3).


Dizin yapısını korumak istediğiniz durumda , bu komutu kaynak dizinden çalıştırın. Çalıştırırsanız find /source/dir -iname '*.mp3' | cpio -pdm /home/me/music/, / home / me / music / source / dir komutunu oluşturur ve dosyalar bu yeni konuma kopyalanır.
Gautam Sreekumar
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.