24 Stimmen

Haben Sie jemals diese Meldung beim Verschieben einer Datei erhalten? mv: überschreibt gerade erstellte Datei nicht

Ich habe ein Bourne-Shell-Skript, das mehrere Aufgaben ausführt. Eine dieser Aufgaben besteht darin, einige Dateien in ein bestimmtes Verzeichnis zu verschieben. Als ich das Skript heute ausführte, erhielt ich die folgende Meldung:

mv: will not overwrite just-created <filename> with <sameFilename>

wobei Dateiname ist der ursprüngliche Dateiname mit vollständigem Pfad, und sameFilename ist genau die gleiche Datei und der gleiche Pfad. Ich verwende dieses Skript regelmäßig jeden Tag und habe diese Meldung noch nie erhalten.

Gleich nach der Ausführung des Skripts habe ich es erneut ausgeführt, um zu sehen, ob der Fehler weiterhin besteht, und ich konnte ihn nicht erneut reproduzieren. Ich führe dieses Skript auf einem Red Hat 5 Enterprise aus.

24voto

rodion Punkte 14419

So kann man es nachmachen:

> mkdir a b c
> touch a/file
> touch b/file
> mv a/file b/file c/
mv: will not overwrite just-created `c/file' with `b/file'

Möglicherweise gibt es noch andere Möglichkeiten, dies zu reproduzieren, aber man kann davon ausgehen, dass das oben genannte passiert ist.

Das heißt, Ihr Skript hat mehrere Dateien mit demselben Namen in dasselbe Ziel in einem einzigen mv Befehl. Nach der Ausführung des obigen Befehls werden Sie feststellen, dass a/file wurde erfolgreich verschoben (und b/file so belassen), so dass das Problem bei der nächsten Ausführung höchstwahrscheinlich nicht mehr auftritt.

11voto

kriss Punkte 22473

Dies geschieht, weil zwei verschiedene Dateien mit demselben Namen mit nur einem Befehl an denselben Ort verschoben werden. Die Option -f hilft in diesem Fall nicht, sondern nur, wenn es bereits eine Zieldatei gibt, die beim Ausführen des Befehls mv überschrieben wird. Was passiert, ist, dass eine der Dateien (die erste, auf die mv stößt) verschoben wird, und es sich weigert, die zweite zu verschieben (die die andere Datei überschreiben würde, mit dem Risiko, dass Benutzerdaten verloren gehen). Dieses Verhalten erklärt auch, dass die Warnung verschwindet, wenn Sie nur zwei Dateien mit demselben Namen haben, wenn Sie den Befehl ein zweites Mal ausführen.

Wenn Sie jedoch viele Dateien mit demselben Namen in Ihrem Verzeichnisbaum haben, kann die Warnung für viele Läufe bestehen bleiben.

Wenn Sie wissen, was Sie tun, können Sie diese Warnung vermeiden, indem Sie die Option --backup=numbered zu mv. Die Zieldateien werden nicht überschrieben, sondern es werden Sicherungsdateien erstellt, wenn eine Kollision auftritt. Wenn Sie diese entfernen wollen, können Sie dies leicht im Nachhinein mit rm *~ .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X