Yanıtlar:
Aynı dosya sistemindeki bir dizini taşırsanız, dizin girişini yalnızca dosya sistemindeki bir konumdan diğerine taşırsınız. Örneğin, mv /source/dir /target/dir
dizin girişini silecektir dir
gelen /source
ve yeni bir tane oluşturun /target
. Bu, bir atom sistemi çağrısı (yani, kesintisiz) tarafından yapılır. Dizin girişlerinin dir
yanı sıra dizinin kendisinin de içeriğini içeren inode etkilenmez.
Dizini bir dosya sisteminden diğerine taşırsanız , tüm dosyalar önce yeni dosya sistemine kopyalanır, sonra da orijinal dosyadan çıkarılır. Bu nedenle mv
, kopyalanırken araya girerseniz, bazı dosyaların iki kopyası ile karşılaşabilirsiniz - eski konumda ve yenisinde.
strace mv /fs1/dir /fs2/
- mv'nin yaptığı en son şeyunlinkat
tüm kaynak dosyaları aynı anda çağırmaktır (kopyalandıkları sırada tek tek değil).
GNU uygulaması komut satırındaki argümanları yineler, önce yeniden adlandırmayı dener ve eğer başarısız olursa, özyinelemeli olarak kopyalar ve daha sonra kaynağı tekrarlı olarak siler. Yani
mv a b c/
b kopyalanmadan önce bir silecek ve hedef kopya tamamlanmadan önce bir öğeyi silmeye başlamayacaktır .
Bunun sadece GNU uygulaması için geçerli olduğuna dikkat edin.
Netleştirmek için: eğer bir içeren bir dizindir d ve e ve b bir dosyadır, sipariş olacaktır
mv
ile de gözlemledim, bu yüzden sadece GNU değil.
Bir dizini taşırsınız, hareketi kesersiniz ve orijinal dizin bozulmadan kalır:
$ mv a b/
Birden fazla dizini taşırsanız, ara verdiğiniz zamana bağlı olarak, her biri kaynak veya hedefte bozulmaz:
$ mv a b c/
Cevabımı nasıl aldım:
$ mv --version
mv (GNU coreutils) 8.21
$ info mv
... It first uses some of the same code that's used by `cp -a'
to copy the requested directories and files, then (assuming the copy
succeeded) it removes the originals. If the copy fails, then the part
that was copied to the destination partition is removed. If you were
to copy three directories from one partition to another and the copy of
the first directory succeeded, but the second didn't, the first would
be left on the destination partition and the second and third would be
left on the original partition.
Test olarak büyük bir klasörü NFS dizinine kopyaladım, yarıda kesildim ve kaynak büyük klasörümdeki dosya sayısı aynı kaldı ve NFS dizininde kısmi içerikler kaldı. Doğrulamak için "find. -Type f | wc -l" kullandım.
Simon'ın cevabı doğru gibi görünüyor.
Kabul edilen cevap, dosya sistemleri arasında dolaşmak konusunda kesinlikle yanlıştır - birkaç kez zaten başımı beladan kurtardı. Alt dizinleri içeren bir dizini taşırken, alt dizinin tamamı kopyalanmadan önce alt dizindeki hiçbir dosya silinmez. Bu, "nesne tarafından nesne" nin gerçek anlamıdır - bir alt dizin bir nesnedir (dosya) ve bu nedenle bütünlüğünün bir şey silinmeden önce varış yerindeki tam bir kopya ile korunması gerekir. Böylece Simon'ın cevabı bana doğru olanı olarak geliyor.
Hayır. Mv nesneyi nesneyle çalıştırır, bu nedenle zaten işlenmiş olan nesneler kaynaktan kaldırılır.
Kesinlikle hayır. Hareket, nesneye göre yapılır. Dolayısıyla, varış noktasına kesme noktasına kadar taşınan nesne artık kaynakta bulunmayacaktır.
Mv büyük bir dosya için yayınlandıysa (farklılar arasında) ve kesintiye uğradıysa kaynak bozulmadan kalacaktır. Hedefte kesinti noktasına kadar eksik bir dosya göreceksiniz.
Bununla birlikte mv'yi aynı komutla geri yükleyebilirsiniz; işlem devam edecektir.
Mv'yi kesmek istiyorsanız, terminalden bağlantısını kesmek istediğinizde, sadece arka plana gönderebilirsiniz:
* press Ctrl+Z
# bg
# disown
fsck
(bu disk temiz bir şekilde çıkarılmadığından büyük olasılıkla otomatik olarak yeniden başlatıldığında otomatik olarak çalışacak) tarafından temizlenmelidir .