Im Allgemeinen gerate ich in Panik, wenn ich feststelle, dass das Ziel oder die Quelle unvollständig sein kann, wenn ich eine Datei verschiebe. Diese Frage gilt für Windows- und Unix-basierte Plattformen. Ich kann mich nie genau erinnern, wie der Befehl move in beiden Fällen funktioniert. Zum Beispiel, wenn Sie ein Verzeichnis verschieben; kopiert es das gesamte Verzeichnis und löscht es danach oder kopiert und löscht es jede Datei einzeln?
Mir ist nach dem Tippen immer klar, mv verybigdir dest
dass ich vielleicht hätte tippen sollen cp -R verybigdir dest && rm -R verybigdir
(wo der &&
Operator nur dann zum nächsten Befehl übergeht, wenn der erste erfolgreich war) - oder ist das sinnlos? Was passiert genau, wenn ich Ctrl+ auf Chalber Strecke drücke ? Was genau passiert unter Windows, wenn ich die Abbrechen-Taste drücke?
Ich kann nicht zählen, wie oft ich etwas verschoben habe (das letzte Mal bei der Verwendung svn
) und zwei Verzeichnisse mit geteiltem Inhalt hatte. Ich denke , die Antwort ist schwierig, weil nicht alle Anwendungen verschieben Gruppen von Dateien auf die gleiche Weise.
quelle
Antworten:
Unter Windows verhält sich das Verschieben auf dasselbe Laufwerk und auf dieselbe Partition wie der Befehl mv von Unix und benennt den Ordner um oder ändert den übergeordneten Ordner. Wenn Sie es jedoch auf einen anderen Treiber oder eine andere Partition verschieben, wird es Datei für Datei kopiert und gelöscht. Daher ist es effizienter, eine TAR-Datei oder eine ZIP-Datei ohne Komprimierung zu verwenden, um Dateien schneller über Partitionen und Festplatten zu verschieben . Wenn Sie es stornieren würden, würde es einfach anhalten, wo es ist. Ich würde glauben, dass das Gleiche für Unix gilt, aber ich habe nicht genug damit experimentiert, um 100% sicher zu sein. Es geht nur darum, den Inode zu ändern. Befindet er sich jedoch auf einer anderen Partition oder einem anderen Laufwerk, muss er in Sektoren auf dieser Partition oder diesem Laufwerk kopiert werden. Wenn Sie es während der Übertragung abbrechen würden, hätte es bereits einige Dateien verschoben, und die Datei, die übertragen wurde, wird es sehen. '
Update: Wenn Sie einen Umzug abbrechen und ihn fortsetzen möchten, geben Sie einfach den Umzugsauftrag erneut aus. Möglicherweise werden Sie gewarnt, dass der Zielordner bereits vorhanden ist. Die Dateien werden jedoch nicht überschrieben (es sei denn, sie waren vor dem ursprünglichen Verschieben vorhanden oder wurden zwischen den beiden Verschiebungsaufträgen hinzugefügt), da sie beim Übertragen aus dem Ordner gelöscht werden Quelle (wenn auf einer anderen Partition oder einem anderen Laufwerk).
quelle
Selbst auf einem perfekt stabilen Computer, der niemals ausfällt: Wenn Sie sich für Zeitstempel interessieren,
mv
ist das besser als normalcp
.(
cp -a
bewahrt die Zeitstempel für Sie auf, und ich gehe davon aus, dass es unter Windows etwas Ähnliches gibt).quelle
Nein.
Erläuterung:
benennt verybigdir in dest um. Dies ist eine atomare Operation, dh kann nicht auf halbem Weg durchfallen.
Wenn sich dest auf einem anderen Gerät befindet, kopiert mv zuerst und löscht dann die alte Version. Dies ist keine atomare Operation. Wenn dies fehlschlägt, haben Sie möglicherweise nur eine Teilkopie von verybigdir in dest, verybigdir ist jedoch noch vollständig.
Ja, andere Anwendungen verschieben Dateien möglicherweise anders.
quelle
mv verybigdir/* dest
.mv verybigdir/* dest
teilt das mv von verybigdir in viele separate Verschiebeoperationen auf. Denken Sie immer daran, dass ein Linux-Programm / -Tool im Gegensatz zu Windows nicht "*" erkennt, sondern um die Shell erweitert wird.Unter Windows kopiere und lösche ich immer, anstatt zu verschieben. Ich habe einmal Dateien verschoben und hier habe ich zum ersten Mal einen schlechten Speicherstick bemerkt. Beim Verschieben der Datei wurde sie zwischenzeitlich angehalten und es wurde ein Fehler gemeldet. Ich überprüfte den Quellordner und die Datei war verschwunden. Dann überprüfte ich das Ziel und es gab eine beschädigte Datei. Dies war häufiger bei größeren Dateien der Fall. Bei den meisten handelte es sich um stundenlange Downloads. Daher empfehlen wir, diese zu kopieren und anschließend zu löschen. Sparen Sie sich am Anfang Zeit, die sich am Ende auszahlt.
quelle
Unter Unix werden bei Verschiebungen, die keine Dateisystemgrenzen überschreiten,
mv
die Daten nicht kopiert: Es wird lediglich die Inode-Datenbank in verschiedenen Verzeichnissen aktualisiert. Dies ist viel schneller alscp
bei großen Dateien.Ferner wurde unter Verwendung
mv
ruft über Dateisystem Grenzen nur leise eine Kopie und Löschmechanismus.Also ich denke du solltest es vorziehen
mv
.quelle
Zumindest in Windows ist move einfach ein automatisierteres Kopieren und Löschen. Ich glaube, mv verschiebt jede Datei einzeln, was bedeutet, dass c-ing keine Dateien verliert. Im Gegensatz zu Windows Explorer werden Ihre Dateien nur auf zwei Bereiche aufgeteilt.
Meine Lösung für dieses Problem lautet: Bewegen Sie sich nie, es sei denn, ich bin sicher, dass ich es verschieben möchte.
quelle
Wenn Sie ACLs für das Quellendateisystem, jedoch nicht für das Ziel verwenden, kopiert mv unter Linux die Quelle und stoppt dann - da die ACLs für das Ziel nicht festgelegt werden können. So haben Sie die Datei auf beiden Seiten. Das ist kein Schalter in mv, um dieses Verhalten zu verhindern, in diesem Fall ist cp & rm vorzuziehen.
quelle