kabuk komutlarında bir dizin adından sonra eğik çizgi (/)


14

Burada küçük bir sorum var.

İki dosya varsa, demek fileave fileb, mv filea filebolur

  • silmek fileb
  • adlandırmak fileaiçinfileb

İki dizin varsa Sonra derler dirave dirb, mv dira dirbolur

  • hareket diraiçine dirb(o olacak dirb/dira)

Her iki durumda da herhangi bir bildirim veya mesaj olmadığına dikkat edin, o zaman bu benim için oldukça tutarsız. Ben mv dira dirbsadece dirbiçeriği ile üzerine yazılması gerektiğini düşünüyorum dira(veya adlı iki dizin altında iki dizin birleştirmek dirb).

Bir yerde eğik çizgi (gibi dira/) olan bir dizin adının bir dizin gibi ele alındığını ve eğik çizgi (gibi dira) olmayan bir dosya (elbette belirli boyutlarda) olarak ele alındığını hatırlıyorum . Neyse şimdi kabuk (zsh ve muhtemelen bash) eğik çizgi kullanarak bir dizin benim gösterim saygı duymak istiyorum. Bunu uygulamamı sağlayan bir terminal seçeneği var mı?

Açıklığa kavuşturmak için, benim istenen davranışım:

  • mv dira dirbsonuçlanır dirbiçeriğiyle üzerine yazılmayadira
  • mv dira dirb/sonuçların diraiçine dirb(in dirb/dira) taşınması

Benimle aynı şekilde düşünen var mı? Yoksa ben sadece garip miyim?


2
İstediğiniz davranışın oldukça tehlikeli olacağını düşünüyorum.
starblue

@starblue: evet bunun tehlikeli olduğuna katılıyorum, ama tutarsızlıktan ziyade tehlikeli bir şeyle yaşamayı tercih ederim
phunehehe

Yanıtlar:


11

Evet, bu GNU araçlarında bile biraz tutarsız.

Teklifinizle ilgili bir sorun, boş olmayan dizinlerin kaldırılamamasıdır. Bunun dışında, -T(GNU ülkesinde, her neyse), ne istediğinize yaklaşır (ilk durum):

$ ls dira/ dirb/
dira/:
a

dirb/:
b
$ mv -iT dira/ dirb/
mv: overwrite `dirb/'? y
mv: cannot move `dira/' to `dirb/': Directory not empty
$ rm dirb/b 
$ mv -iT dira/ dirb/
mv: overwrite `dirb/'? y
$ ls dira/ dirb/
ls: cannot access dira/: No such file or directory
dirb/:
a

Ayrıca bir takma ad da ekleyebilirsiniz alias ren=mv -T.
Mikel

0

Eğer her şeyi diradan dirseğe taşımak istiyorsanız koşabilirsiniz mv dira/* dirb.

HP-UX'imdeki mv man sayfasına göre.

The mv command moves:

+ One or more directory subtrees (directory1, [directory2, ...]) to a new or existing directory (dest-directory).


3
Komutunuz tüm dotfiles'leri kaçıracaktı.
qbi

Kim yine de nokta dosyalara ihtiyaç duyar;)
Robert Massaioli

1
Ve eğer bu bir sorunsa, shopt -s dotglobbash bunu düzeltir.
David Z
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.