replace ile sürükle bırak 'mv' eşdeğeri?


19

Bir GUI ortamında, yer değiştirmeli bir sürükle ve bırak, dosyaları ve tüm dizinleri (içerikler dahil) kopyalanan her şeyle değiştirir. Bu sezgisel sonucu 'mv' komutuyla gerçekleştirmenin bir yolu var mı?

Yanıtlar:


20

İle değil mv.

mv(İsmine rağmen) temel işlevi bir nesnenin ismini değiştirmektir . UNIX'in verdiği garantilerden biri, yeniden adlandırmaların atomik olmasıdır - asla kısmen tamamlanmış bir yeniden adlandırma görmenize izin verilmez. Bu garanti, /etc/passwddiğer programların bakabileceği bir dosyayı ( örneğin) değiştirmek istiyorsanız ve dosyanın eski veya yeni sürümünü görmesini istiyorsanız ve başka bir olasılık yoksa çok yararlı olabilir . Ama sizin tarif ettiğiniz gibi bir "özyinelemeli yeniden adlandırma" bu garantiyi kıracak - onu ortada durdurabilir ve yarı taşınmış bir ağacınız ve muhtemelen bir karmaşaya sahip olacaksınız - ve bu yüzden felsefeye gerçekten uymuyor / mv. Neden mv -rvar olmadığına dair tahminim bu.

(Bu Aldırma mvdiğer küçük yollarla felsefesi. Örneğin, bu aralar mvaslında yok cpizledi rmbaşka bir dosya sistemi dosyaları taşırken.)

Yeter felsefe. Aynı dosya sisteminde bir ağacı bir yerden diğerine özyineli olarak taşımak ("sürükleyip bırakmak") istiyorsanız, verimliliğini ve hızını mvaşağıdaki gibi alabilirsiniz (örneğin):

cp -al source/* dest/ && rm -r source/*

" -lBayrak cp, kopyalamak yerine sabit bağlantı oluştur" anlamına gelir - etkin bir şekilde eski dosya adıyla aynı dosya verilerini gösteren yeni bir dosya adı oluşturur. Bu yalnızca sabit bağlantıları destekleyen dosya sistemlerinde çalışır - bu nedenle herhangi bir yerel UNIX-ish dosya sistemi iyidir, ancak FAT ile çalışmaz.

&&Vasıta "Yukarıdaki komutu başarılı olursa sadece aşağıdaki komutu çalıştırın". İsterseniz, iki komutu birer birer çalıştırabilirsiniz.


Son derece bilgilendirici. Çok teşekkür ederim!
user7089

4

mvHedefte boş olmayan alt dizinler değiştirilmeyeceğinden, açıkladığınız sürükle bırak davranışını çoğaltabileceğinizi sanmıyorum .

Belki rsync? Gibi bir şey rsync -a -r source/ target/? İle çalıştırın -v -nyapmak bir ayrıntılı kuru işletilen emin istediğini yapar hale getirmek için ilk.


3

mv -f /path/to/source/folder/* /destination/folder/

/ Path / dizinindeki her şeyi dosya ve dizinler dahil / hedef / klasöre taşıyacaktır.

Ve varolan dosyaların ve dizinlerin üzerine yazacaktır.


2
Sadece boş dizinler
Kevin

1

Muhtemelen buna doğru cevabı değiştirmek isteyeceksiniz:

https://github.com/iaindooley/pickdrop

Misal:

Diyelim ki:

test/
test/index.php
test/images/
test/images/a.jpg
test/images/thing.png

ve bu şeyleri / siteye taşımak istiyorum

yani şöyle görünüyor:

site/
site/public/
site/public/index.php
site/public/a.jpg
site/public/thing.png

Gidebilirim:

cd images &&
pick a.jpg thing.png
cd .. &&
pick index.php &&
cd .. &&
mkdir site &&
mkdir site/public &&
cd site/public &&
drop

Bu kelimenin tam anlamıyla kes ve yapıştır.


Çok güzel ve kesinlikle içine değer. Ancak, soru özellikle 'mv' ile ilgiliydi, bu yüzden doğru cevabı mv'nin arkasındaki felsefeyi ayrıntılı olarak açıklayacağım diye düşünüyorum. Bu katkı için teşekkür ederim, kesinlikle çok yararlı.
user7089

Ayrıca, benioku dosyasından da dikkat çekiyor: "Hiç de sağlam değil - yeni bir çalıştırılabilir ~ / .drop dosyası oluşturmak için ~ / .pick dosya yollarını hangi zamana kadar kullandığını belirtene kadar, seçimlerinizi ~ / .pick içinde saklar. seçtiğiniz dosyaların her birini geçerli çalışma dizinine kopyalamak için ".
user7089
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.