ukośnik (/) po nazwie katalogu w poleceniach powłoki

14

Mam tu małe pytanie.

Jeśli mam dwa pliki, powiedz fileai fileb, mv filea filebby

  • kasować fileb
  • zmień nazwę fileanafileb

Więc jeśli mam dwa katalogi, powiedz dirai dirb, mv dira dirbby

  • przenieś się dirado dirb(stanie się dirb/dira)

Zauważając, że w obu przypadkach nie ma zawiadomienia ani wiadomości, jest to dla mnie dość niespójne. Myślę, że mv dira dirbpowinienem po prostu nadpisać dirbzawartość dira(lub scalić dwa katalogi w katalogu o nazwie dirb).

Pamiętam, że czytałem gdzieś, że nazwa katalogu z ukośnikiem (podobnym dira/) jest traktowana jak katalog, a nazwa bez ukośnika (podobnego dira) jest traktowana jak plik (oczywiście w pewnym zakresie). W każdym razie chcę, aby powłoka (zsh i ewentualnie bash) szanowała moją notację katalogu za pomocą ukośnika. Czy istnieje opcja terminalu, która pozwala mi to egzekwować?

Aby wyjaśnić, oto moje pożądane zachowanie:

  • mv dira dirbpowoduje dirbzastąpienie treścidira
  • mv dira dirb/powoduje diraprzeniesienie do dirb(in dirb/dira)

Czy ktoś myślał tak samo jak ja? Czy jestem po prostu dziwny?

phunehehe
źródło
2
Myślę, że twoje pożądane zachowanie byłoby raczej niebezpieczne.
starblue,
@starblue: tak Zgadzam się, że to niebezpieczne, ale wolę żyć z czymś niebezpiecznym niż z niekonsekwencją
phunehehe

Odpowiedzi:

11

Tak, jest to trochę niespójne, nawet w przypadku narzędzi GNU.

Jednym z problemów z twoją propozycją jest to, że niepustych katalogów nie można usunąć. Poza tym -T(w każdym razie w GNU) przybliża to, czego chcesz (pierwszy przypadek):

$ 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
tshepang
źródło
Możesz także dodać alias, np alias ren=mv -T.
Mikel
0

Jeśli chcesz przenieść wszystko z dira na dirb, możesz biegać mv dira/* dirb.

Jak na stronie podręcznika mv na moim HP-UX.

The mv command moves:

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

Hemant
źródło
3
Twoje polecenie pominie wszystkie pliki dot.
qbi
Kto i tak potrzebuje plików kropkowych;)
Robert Massaioli,
1
A jeśli to problem, shopt -s dotglobw bash to naprawi.
David Z