Ogólnie rzecz biorąc, wpadam w panikę, kiedy zdaję sobie sprawę, że jeśli anuluję przeniesienie pliku, może to spowodować niekompletność obiektu docelowego lub źródła. To pytanie dotyczy platform Windows i Unix. W obu przypadkach nigdy nie pamiętam dokładnie, jak działa polecenie przenoszenia. Na przykład, jeśli przenosisz katalog; czy kopiuje cały katalog, a następnie usuwa go później, czy też kopiuje, a następnie usuwa każdy plik osobno?
Zawsze zdaję sobie sprawę, po wpisaniu czegoś takiego mv verybigdir dest
, że być może powinienem był napisać cp -R verybigdir dest && rm -R verybigdir
(gdzie &&
operator przechodzi do następnego polecenia tylko wtedy, gdy pierwsze z nich zakończyło się powodzeniem) - czy to nie ma sensu? Co się dokładnie dzieje, kiedy naciskam Ctrl+ w Cpołowie ruchu? Podobnie, co dokładnie dzieje się w systemie Windows po naciśnięciu przycisku Anuluj?
Nie mogę policzyć, ile razy coś przeniosłem (ostatnim razem, gdy korzystałem svn
) i miałem dwa katalogi z podzieloną zawartością. Myślę, że odpowiedź jest trudna, ponieważ nie wszystkie aplikacje przenoszą grupy plików w ten sam sposób.
źródło
Odpowiedzi:
W systemie Windows przejście na ten sam dysk i partycję będzie działać tak samo, jak polecenie mv Unixa, zmiana nazwy folderu lub zmiana jego rodzica. Jeśli jednak przeniesiesz go na inny sterownik lub partycję, skopiuje i usunie plik po pliku, dlatego bardziej efektywne jest użycie pliku tar lub zip bez kompresji, aby szybciej przenosić pliki między partycjami i dyskami twardymi . Jeśli go anulujesz, po prostu zatrzyma się na swoim miejscu. Sądzę, że to samo dotyczy Uniksa, ale nie eksperymentowałem z nim wystarczająco, aby mieć 100% pewności. To tylko kwestia zmiany i-węzła, ale jeśli znajduje się on na innej partycji lub dysku, należy go skopiować do sektorów na tej partycji lub dysku. Jeśli anulujesz go podczas przesyłania, przeniesie on już niektóre pliki, a plik, który był przesyłany, zobaczy to „
Aktualizacja: Jeśli chcesz anulować ruch i chcesz go wznowić, po prostu ponownie wydaj polecenie przeniesienia. Może to ostrzec, że folder docelowy już istnieje, ale pliki nie zostaną nadpisane (chyba że istniały przed pierwotnym przeniesieniem lub nie zostały dodane między dwoma zleceniami przeniesienia), ponieważ zaraz po ich przeniesieniu są usuwane z źródło (jeśli jest na innej partycji lub dysku).
źródło
Nawet na idealnie stabilnym komputerze, który nigdy nie zawodzi: jeśli zależy Ci na znacznikach czasu, to
mv
jest lepszy niż zwykłycp
.(
cp -a
zachowa dla ciebie znaczniki czasu i zakładam, że coś podobnego istnieje w systemie Windows).źródło
Nie.
Wyjaśnienie:
zmienia nazwę verybigdir na dest. Jest to operacja atomowa, tzn. Nie może zawieść w połowie.
Jeśli dest jest na innym urządzeniu, mv najpierw skopiuje, a następnie usunie starą wersję. To nie jest operacja atomowa. Jeśli się nie powiedzie, możesz mieć tylko częściową kopię verybigdir w dest, ale verybigdir nadal będzie kompletna.
Tak, inne aplikacje mogą przenosić pliki inaczej.
źródło
mv verybigdir/* dest
.mv verybigdir/* dest
dzieli mv z verybigdir na wiele oddzielnych operacji przenoszenia. Zawsze pamiętaj, że w przeciwieństwie do systemu Windows, program / narzędzie Linux nie widzi tam „*”, jest rozszerzane przez powłokę.W systemie Windows zawsze kopiuję i usuwam zamiast przenosić. Kiedyś przenosiłem pliki i tutaj po raz pierwszy zauważyłem zły patyk pamięci. Podczas przenoszenia pliku zatrzymał się pomiędzy i dostałem błąd, więc sprawdziłem folder źródłowy i plik zniknął, a następnie sprawdziłem miejsce docelowe i był uszkodzony plik. Zdarza się to częściej w przypadku plików o większym rozmiarze, a większość z nich to pobieranie, które trwało godziny, więc zalecam kopiowanie, a następnie usuwanie. Zaoszczędź czas na początku, to się w końcu opłaci.
źródło
W unixie, w ruchach, które nie przekraczają granic systemu plików,
mv
nie kopiuje danych: po prostu aktualizuje bazę danych i-węzłów w różnych katalogach. Jest to znacznie szybsze niżcp
w przypadku dużych plików.Co więcej, używanie
mv
ponad granicami systemu plików po prostu dyskretnie wywołuje mechanizm kopiowania i usuwania.Więc myślę, że powinieneś
mv
.źródło
Przynajmniej w systemie Windows ruch jest po prostu bardziej zautomatyzowanym kopiowaniem i usuwaniem. Wierzę, że mv przenosi każdy plik osobno, co oznacza, że ^ c-ing nie straci żadnych plików, po prostu skończysz z plikami podzielonymi na dwa miejsca - w przeciwieństwie do Eksploratora Windows, który usunie wszystko po anulowaniu.
Moje rozwiązanie tego: nigdy się nie ruszaj, chyba że jestem pewien, że chcę to przenieść.
źródło
Jeśli używasz list ACL w źródłowym systemie plików, ale nie w miejscu docelowym, mv w systemie Linux skopiuje źródło, a następnie - z powodu niemożności ustawienia list ACL w miejscu docelowym - zatrzyma się. W rezultacie plik ma po obu stronach. Nie ma przełącznika w mv, aby temu zapobiec, więc w tym przypadku preferowane są cp && rm.
źródło