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/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.
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.
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.