W jakim przypadku wynik jest niespójny? Wydaje się, że kiedykolwiek istnieje katalog docelowy, przenosi się do katalogu docelowego, w przeciwnym razie zostaje zmieniona jego nazwa.
brat
To jest niespójne. To samo polecenie powinno zrobić to samo. Oznacza to, że polecenie jest niejednoznaczne.
user4951
Nie jest to niespójne, ponieważ działa konsekwentnie w kontekście. Chociaż widzę, że jest to mylące, ale im więcej o tym myślę, polecenie musi być takie, aby działało we wszystkich scenariuszach.
jmathew 15.01.2013
Wolałbym powiedzieć, że jest tak zaprojektowany i logiczny .. jeśli używasz mvz plikami, robi to samo. Wystarczy zmienić nazwę. Ale mvz katalogami Nie warto usuwać całego katalogu z podkatalogiem z powodu jednego mvpolecenia, które nie jest bezpieczny. więc jest przenoszony jako test1/test2. ale jeśli nadal chcesz go osiągnąć, napisz, aliasktóry sprawdza, czy podanym parametrem jest katalog, a następnie wykonaj mvkomendę rm -rf katalog i użyj polecenia, ale użyj go na własne ryzyko.
harish.venkat 15.01.2013
Podejrzewam, że twój przykład opiera się na błędnym zapamiętaniu czegoś, co wydarzyło się w przeszłości, na podstawie „Wygląda na to, że robię coś takiego”. Jeśli oba /helloi /hello2są katalogi, a ja zauważyłem, że cp /hello /hello2jest jeden to niespójne. W zależności od kombinacji końcowych ukośników, czasami zawartość /hellojest kopiowana /hello2, a czasem sam katalog jest kopiowany.
Izkata
Odpowiedzi:
16
mv a bpróbuje przejść ado bif bjest katalogiem lub dowiązaniem symbolicznym do katalogu. W przeciwnym razie zmieni nazwę (lub skopiuje i usunie, jeśli w różnych systemach plików) ana b.
Aby uzyskać spójny wynik przeniesienia pliku do katalogu, możesz:
mv file dir/
lub
mv file dir/.
Jeśli dirnie istnieje, pojawi się błąd i nazwa nie zostanie zmieniona filena dir.
Jeśli z drugiej strony chcesz to zrobić, renamenie martwiąc się, czy plik docelowy istnieje jako katalog, czy nie, w GNU mv możesz:
mv -T file dest
W takim przypadku filenie zostanie przeniesiony do katalogu destif dest. Jednakże, jeśli obie filei destsą katalogi i destjest pusta, filezostanie zmieniona na dest(i oryginalna destusuwane). Jeśli oba są katalogami i destnie są puste, mv -Tbędą narzekać.
To samo, jeśli filei niedest są katalogami (i które obejmują dowiązania symboliczne, w tym dowiązania symboliczne do katalogów), zostaną przemianowane na (chociaż pojawi się monit, jeśli nie masz uprawnień do zapisu ), a oryginał zostanie usunięty. Jest różnica w przypadku, gdy jest dowiązanie symboliczne do katalogu. Dzięki , zostanie zmieniona na , ale bez , jest przenoszony do katalogu wskazywanego przez .filedestdestdestmv file destdest-Tfiledest-Tfiledest
Podsumowując, po mv -T file destalbo filezostanie zmieniona nazwa , albo pojawi destsię komunikat o błędzie (lub monit). Jeśli polecenie się powiedzie, oryginał dest, jeśli wcześniej istniał, zostanie usunięty.
mv
z plikami, robi to samo. Wystarczy zmienić nazwę. Alemv
z katalogami Nie warto usuwać całego katalogu z podkatalogiem z powodu jednegomv
polecenia, które nie jest bezpieczny. więc jest przenoszony jakotest1/test2
. ale jeśli nadal chcesz go osiągnąć, napisz,alias
który sprawdza, czy podanym parametrem jest katalog, a następnie wykonajmv
komendę rm -rf katalog i użyj polecenia, ale użyj go na własne ryzyko./hello
i/hello2
są katalogi, a ja zauważyłem, żecp /hello /hello2
jest jeden to niespójne. W zależności od kombinacji końcowych ukośników, czasami zawartość/hello
jest kopiowana/hello2
, a czasem sam katalog jest kopiowany.Odpowiedzi:
mv a b
próbuje przejśća
dob
ifb
jest katalogiem lub dowiązaniem symbolicznym do katalogu. W przeciwnym razie zmieni nazwę (lub skopiuje i usunie, jeśli w różnych systemach plików)a
nab
.Aby uzyskać spójny wynik przeniesienia pliku do katalogu, możesz:
lub
Jeśli
dir
nie istnieje, pojawi się błąd i nazwa nie zostanie zmienionafile
nadir
.Jeśli z drugiej strony chcesz to zrobić,
rename
nie martwiąc się, czy plik docelowy istnieje jako katalog, czy nie, w GNU mv możesz:W takim przypadku
file
nie zostanie przeniesiony do katalogudest
ifdest
. Jednakże, jeśli obiefile
idest
są katalogi idest
jest pusta,file
zostanie zmieniona nadest
(i oryginalnadest
usuwane). Jeśli oba są katalogami idest
nie są puste,mv -T
będą narzekać.To samo, jeśli
file
i niedest
są katalogami (i które obejmują dowiązania symboliczne, w tym dowiązania symboliczne do katalogów), zostaną przemianowane na (chociaż pojawi się monit, jeśli nie masz uprawnień do zapisu ), a oryginał zostanie usunięty. Jest różnica w przypadku, gdy jest dowiązanie symboliczne do katalogu. Dzięki , zostanie zmieniona na , ale bez , jest przenoszony do katalogu wskazywanego przez .file
dest
dest
dest
mv file dest
dest
-T
file
dest
-T
file
dest
Podsumowując, po
mv -T file dest
albofile
zostanie zmieniona nazwa , albo pojawidest
się komunikat o błędzie (lub monit). Jeśli polecenie się powiedzie, oryginałdest
, jeśli wcześniej istniał, zostanie usunięty.źródło
Jest to całkowicie zależne od tego, czy istnieje już katalog o nazwie „/ hello2”, czy nie.
Jeśli istnieje / hello2 AND to katalog, wówczas move zawsze przenosi / hello do / hello / hello2
Jeśli / hello2 nie istnieje, ruch zawsze zmieni nazwę / hello na / hello2
Jeśli / hello2 istnieje AND to plik, pojawi się błąd „nie można zastąpić katalogu innego niż„ hello2 ”katalogiem„ hello ”.
źródło
Próbowałem tych
mam nadzieję, że to wszystko wyjaśnia.
-v
jest trybem pełnym.źródło