Dosyaları bir dizini ve alt dizinlerini tekrarlı bir şekilde türe göre başka bir dizine nasıl taşıyabilirim?


30

Bir dosya türünü bir dizinden ve tüm alt dizinlerinden taşımak için iyi bir yol olabilir mi?

"Tümünü taşı * .ogg içinde / thisdir ardışık olarak / somedir" gibi. Birkaç şey denedim; En iyi çabam şuydu (hala o kadar da büyük değil):

find /thisdir -type f -name '*.ogg' -exec mv /somedir {} \;

Her dosya adından önce her satırda geri döndü.

mv: cannot overwrite non-directory `/thisdir/*.ogg' with directory `/somedir'

Yanıtlar:


23

Birlikte find kullanabilirsiniz Xargs bunun için

find /thisdir -type f -name "*.ogg" -print0 | xargs -0 -Imysongs mv -i mysongs /somedir

Yukarıdaki komuttaki -I, xargs'a hangi değiştirme dizesini kullanmak istediğinizi belirtir (aksi halde komutun sonuna argümanları ekler).

VEYA
Komutunuzda komuttan sonra sadece '{}' harfini taşımayı deneyin mv.

find /thisdir -type f -name '*.ogg' -exec mv -i {} /somedir \;


1
Lütfen yukarıdaki komutları denemeden önce yedekleme yapmayı unutmayın :-).
Hemant

2
Btw, ilk isim için bulmak için - ve xargs için -0, dosya adı problemlerinde boşluk bırakmamak için mümkün olduğunca kullanılmalıdır.
maxschlepzig

@ maxschlepzig: iyi nokta. Düzenleyeceğim.
Hemant

2
mv -iBurada kullanmanızı şiddetle tavsiye ediyorum , bu yüzden beklenmedik bir şey olursa dosyaların üzerine yazma riskini almazsınız.
Gilles 'SO- kötülük olmayı'

2
gnu core utils from mv ile mv -t <targetdir>\ yerine \;

10
find /thisdir -type f -name "*.ogg" -exec mv {} /somedir \;

Mv'nin argümanlarını değiştirdin.


9

Zsh veya bash 4'te tüm *.oggdosyaları bir araya getirmek için /somedir:

mv /thisdir/**/*.ogg /somedir

Dizin hiyerarşisini çoğaltmak istiyorsanız: (doğrudan tarayıcıya yazılan uyarı)

rsync -a --prune-empty-dirs --include='*/' --include='*.ogg' --exclude='*' /thisdir /somedir

bash içinde uygun ötesinde
Mark
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.