Mam tu małe pytanie.
Jeśli mam dwa pliki, powiedz filea
i fileb
, mv filea fileb
by
- kasować
fileb
- zmień nazwę
filea
nafileb
Więc jeśli mam dwa katalogi, powiedz dira
i dirb
, mv dira dirb
by
- przenieś się
dira
dodirb
(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 dirb
powinienem po prostu nadpisać dirb
zawartość 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 dirb
powodujedirb
zastąpienie treścidira
mv dira dirb/
powodujedira
przeniesienie dodirb
(indirb/dira
)
Czy ktoś myślał tak samo jak ja? Czy jestem po prostu dziwny?
Odpowiedzi:
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):źródło
alias ren=mv -T
.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).
źródło
shopt -s dotglob
w bash to naprawi.