Mv dizin yerine bir dizine taşınmaya nasıl karar verilir?


18

Diyelim bir dizinim var /hello.

Sonra ben yaparım mv /hello /hello2.

Ben hareketli muyum /helloiçine /hello2/hello? Yoksa taşınacağım /helloiçin /hello2?

Öyle görünüyor ki böyle bir şey yaptığımda tutarsız sonuçlar alıyorum.


1
Hangi durumda sonuç tutarsız? Hedef dizin mevcut olduğunda hedef dizine taşınır, aksi takdirde yeniden adlandırılır.
jmathew

Bu tutarsız. Aynı komut aynı şeyi yapmalıdır. Bu, komutun belirsiz olduğu anlamına gelir.
user4951

Bu gerçekten tutarsız değil, çünkü sürekli olarak bağlam içinde hareket ediyor. Her ne kadar kafa karıştırıcı olduğunu görebilsem de, daha çok düşündüğümde, tüm senaryolarda çalışmak için komutun bu şekilde olması gerekiyor.
jmathew

Doğrusu bu nasıl tasarlandığı mi ve kullanmak logical..if onun da derdi mvdosyalarla ile aynı renaming.but thing.just yok mvdizinleri ile bu alt dizin ile çünkü biri bütün dizin silmek için iyi değil mvdeğil komutu kasa. böylece hareket ettirilir test1/test2. ancak yine de ulaşmak istiyorsanız, aliasverilen parametrenin dizin olup olmadığını kontrol edin ve ardından rm -rf dizinini mvkullanın ve komutu kullanın , ancak kendi sorumluluğunuzdadır.
harish.venkat

Örneğinizin geçmişte olan bir şeyi "Bu gibi bir şey yaptığım anlaşılıyor" şeklinde yanlış hatırlamaya dayandığından şüpheleniyorum. Her ikisi de /hellove /hello2dizin ise, o zaman cp /hello /hello2tutarsız olanın fark ettim . Sondaki eğik çizgi kombinasyonuna bağlı olarak, bazen içeriği /hellokopyalanır /hello2ve bazen dizinin kendisi kopyalanır.
Izkata

Yanıtlar:


16

mv a btaşımak için girişimler aiçine beğer bbir dizin veya bir dizine sembolik köprü olduğunu. Aksi takdirde, yeniden adlandırmak (veya kopyalayıp farklı dosya sistemleri üzerinde eğer silme) olacak akadar b.

Bir dosyayı bir dizine taşımak için tutarlı bir sonuç elde etmek için şunları yapabilirsiniz:

mv file dir/

veya

mv file dir/.

Eğer diryoksa, bir hata alırsınız ve o adlandırmak olmaz fileüzere dir.

Öte yandan, renameGNU mv ile hedef dosya bir dizin olarak bulunup bulunmadığından endişe etmeden yapmak istiyorsanız , şunları yapabilirsiniz:

mv -T file dest

Bu durumda, bir dizin ise if fileiçine taşınmaz . Ancak, hem ve hem de dizin ise ve boşsa, olarak yeniden adlandırılır (ve orijinal kaldırılır). Her ikisi de dizinse ve boş değilse , şikayet edecektir.destdestfiledestdestfiledestdestdestmv -T

Eğer aynı, fileve destvardır değil dizinleri (ve bu dizin sembolik dahil sembolik içerir), fileile yeniden adlandırılır dest(eğer yazma yetkiniz yok eğer bir istem alacak olsa dest) ve orijinal destkaldırılacaktır. Bir dizine bir sembolik bağlantı olması mv file destdurumunda bir fark vardır dest. İle -T, fileolarak yeniden adlandırılır dest, ancak olmadan -T, fileile işaret edilen dizine taşınır dest.

Özetlemek gerekirse mv -T file dest, ya fileyeniden adlandırılmış olacak destya da bir hata mesajı (ya da bir bilgi istemi) alacaksınız. Komut başarılı olursa, orijinal dest, önceden varsa, kaldırılmış olacaktır.


14

Bu tamamen zaten var olan '/ hello2' adında bir dizin olup olmadığına bağlıdır.

/ Hello2 varsa VE bir dizindeyse, taşıma / hello komutunu / hello / hello2 klasörüne taşır

/ Hello2 yoksa, taşıma işlemi her zaman / hello öğesini / hello2 olarak yeniden adlandırır

/ Hello2 varsa VE bir dosya ise, "hello2" dizini olmayan "hello" dizini üzerine yazılamaz "hata mesajı alırsınız.


3

Bunları denedim

mkdir test1
mv -v test1 test2
output:`test1' -> `test2'
mkdir test1
mv -v test2 test1
output: `test2' -> `test1/test2'
touch test2
output:mv: cannot overwrite non-directory `test2' with directory `test1'

umarım bu her şeyi açıklar. -vayrıntılı moddur.

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.