Soru Bash: mv dizini bir kerede


Bir klasörün tüm alt dizinlerini aynı sunucudaki başka bir paylaşıma taşımaya çalışıyorum. Bir mv * yaparsam, tüm klasörler aktarılana kadar klasörler kaldırılmayacağından alan biter. Bu yüzden her biri arasında dolaşan kısa bir senaryo oluşturmak istiyorum. Kimsenin bakabileceğim bir örneği var mı? Ben aradım ama tam olarak ne aradığımı bulamıyorum.


7
2018-04-17 13:36


Menşei


Merak etme: Bir bölüm içindeki hareketli dizinlerin "anlık" olduğunu, dizinin ne kadar dolu olmasının önemli olmadığını düşünürdüm? - Hagen von Eitzen
Ağ bağlantısı üzerinden yaparsanız değil. Ardından tüm dosyalar indirilir ve tekrar yüklenir. - MSalters
Bu sorunu, iki farklı ZFS veri kümesinde (aynı havuzda) bulunan iki klasör arasında dosyaları hareket ettirirken ve farklı dosya sistemleri gibi işlendiğinde bu sorunu yaşadım. Akılda tutulması gereken bir şey. - Programster


Cevaplar:


Kullanabilirsin rsync(1):

rsync --remove-source-files /path/to/source /path/to/destination

Bu, başarıyla aktarılan dosyaları orijinal yoldan kaldırır.


20
2018-04-17 13:49



+1 Uygun bir iş için uygun bir araç kullanmak için, her görev en iyi şekilde yapılmış bir bash betiğinde yapılmaz - Vality


İstediğiniz for.

Bir örnek (bu sadece ne yapacağını gösterecektir):

for item in *; do
    echo mv "$item" /destination/directory
done

Mutlu olduğunda, kaldır echo bunu gerçek yapmak için.


10
2018-04-17 13:38





Kullanmak mv dosyaları bir birimden farklı bir birime taşımak için komut bir kopyalama işlemidir. Ancak kaynak hacminde nasıl yer kalmazdınız? Sadece uzayın bittiğini hedef Bu birim, taşıdığınız dosyaların toplam boyutundan küçükse, Ancak her iki durumda da, yalnızca kaynak hacmindeki alanı ayırırsınız, daha fazla yer ayırmazsınız.

Eğer kullanırsan mv dosyaları aynı dizinde bir dizinden diğerine "taşımak" için, bu sadece bir yeniden adlandırma işlemi. Veri kopyalamıyorsunuz, sadece farklı bir dizin hiyerarşisi sunmak için dosya işaretleyicileri ayarlıyorsunuz. Alan bittiği yerden çıkmayacak çünkü dosya verileri tam olarak nerede kalıyor?

Her iki durumda da, problemi gördüğümden emin değilim. :-) Bunu gerçekten deniyor muydunuz ve uzayı yitirdiniz mi, yoksa sadece ileriyi planlamaya mı çalışıyorsunuz?


4
2018-04-18 08:06



Kullanıcı, aynı gerçek bölüm üzerinde iki farklı dizin ağacını dışa aktarmak için bir ağ dosya sistemi kullandığını düşünüyorum, aralarında kopyalama yapmak için bir ağ dosya sisteminden TCP'ye gönderen bir nedenle disk ... Biliyorum, ama bu soruna neden olur ... - Vality
Bunu merak ettim, ve bu olur işlem, dosya tanıtıcıları ile sadece maymun yapamadığından, geçici çoğaltma neden olur. Ama durum buysa, o makine üzerinde doğrudan bir kabuk oturumu almak ve kullanmak daha iyi olurdu gibi görünüyor mv verimli yol. - Craig


ls -1 | xargs -n1 -i echo mv '{}' destination

Yankıyı mutlu ettiğin zaman çıkar.


2
2018-04-17 14:44



Ve şunu ekledi: -d "\ n" - NinjaCat


Sadece referans için inanıyorum mv Komut bir kopya yapmaz, ardından işlemi siler, yani

mv /home/foo /home/bar 

Kısa bir süre için aynı anda var. Daha çok yeniden adlandırma gibi çalışır. Dosya sistemi muhasebesini değiştirmek için gereken önemli nokta /home/foo şimdi puan /home/bar diskteki verileri fiziksel olarak bir yerden başka bir yere taşımadan veya kopyalamayı ve daha sonra önceki konumdan silmeden.


1
2018-04-17 17:50



Sanırım farklı dosya sistemleri arasında kopyalama yapıyor, sadece bir dizini yeni bir yola taşımakla kalmıyor. - Vality