Ich habe ein Bourne-Shell-Skript, das mehrere Aufgaben ausführt. Eine dieser Aufgaben besteht darin, einige Dateien in ein bestimmtes Verzeichnis zu verschieben. Heute, als ich das Skript ausgeführt habe, habe ich folgende Nachricht erhalten:
%Vor%Dabei ist Dateiname der ursprüngliche Dateiname mit dem vollständigen Pfad und selbeDateiname ist genau die gleiche Datei und derselbe Pfad. Ich benutze dieses Skript regelmäßig jeden Tag und habe diese Nachricht nie zuvor erhalten.
Gleich nach dem Ausführen des Skripts starte ich es erneut, um zu sehen, ob der Fehler bestehen bleibt, und ich konnte es nicht erneut reproduzieren. Ich führe dieses Skript in einem Red Hat 5 Enterprise.
So wird es reproduziert:
%Vor%Es kann andere Wege geben, dies zu reproduzieren, aber es ist vernünftig anzunehmen, dass oben geschehen ist.
Das heißt, Ihr Skript hat mehrere Dateien mit demselben Namen in dasselbe Ziel in einem einzigen Befehl mv
verschoben. Nach dem Ausführen der obigen Schritte werden Sie feststellen, dass a/file
erfolgreich verschoben wurde (und b/file
unverändert gelassen wurde), so dass das nächste Mal, wenn Sie es ausführen, das Problem höchstwahrscheinlich verschwindet.
Dies passiert, weil zwei verschiedene Dateien mit demselben Namen mit nur einem Befehl an dieselbe Stelle verschoben werden. Die Option -f hilft in diesem Fall nicht, sie gilt nur, wenn bereits eine Zieldatei vorhanden ist, die beim Ausführen des Befehls mv überschrieben wird. Was passiert, ist, dass eine der Dateien (die zuerst gefunden wurde) von mv verschoben wird, und es sich weigert, die zweite Datei zu verschieben (das würde die andere Datei überschreiben, die das Risiko hat, Benutzerdaten auszulösen). Dieses Verhalten erklärt auch, dass wenn Sie nur zwei Dateien mit demselben Namen haben, die Warnung beim zweiten Ausführen des Befehls verschwindet.
Wenn Sie jedoch viele Dateien mit demselben Namen in Ihrer Verzeichnisstruktur haben, kann die Warnung für viele Läufe dort bleiben.
Wenn Sie wissen, was Sie tun, um diese Warnung zu vermeiden, fügen Sie die Option --backup=numbered
zu mv hinzu. Die Zieldateien werden nicht überschrieben, sondern es werden Sicherungsdateien erstellt, wenn eine Kollision auftritt. Wenn die Idee darin besteht, diese zu entfernen, kann dies leicht mit rm *~
durchgeführt werden.