Yanıtlar:
İ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/passwd
diğ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 -r
var olmadığına dair tahminim bu.
(Bu Aldırma mv
diğer küçük yollarla felsefesi. Örneğin, bu aralar mv
aslında yok cp
izledi rm
baş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ı mv
aşağıdaki gibi alabilirsiniz (örneğin):
cp -al source/* dest/ && rm -r source/*
" -l
Bayrak 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.
mv
Hedefte 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 -n
yapmak bir ayrıntılı kuru işletilen emin istediğini yapar hale getirmek için ilk.
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.