Ich habe gerade einen kleinen Teil meiner Audiosammlung durch einen blöden Fehler verloren. :-(
GLADLY Ich hatte ein ziemlich aktuelles Backup, aber es war immer noch ärgerlich. Abgesehen von deinem, war der andere Schuldige, der das Unheil angerichtet hat, der folgende Beweis mv
:
Die Audiodateien hatten ein bestimmtes Schema:
ARTIST - Some Title YY.mp3
Wo YY
ist die zweistellige Jahresangabe?
mkdir 90<invisible control character>
(Bis zu diesem Moment wusste ich nicht, dass ich tatsächlich ein Drittel überschüssigen Zeichens eingegeben hatte, das unsichtbar war ...!)
Anstatt alles in einem Verzeichnis zu haben, wollte ich alle Musik der 90er Jahre in einem Verzeichnis haben. Also schrieb ich:
find . -name '* 9?.mp3' -exec mv {} 90 \;
Nicht so schwer, die Idee zu bekommen, was eh passiert ist? : ->
Das (katastrophale) Ergebnis war ein jungfräuliches leeres Verzeichnis mit dem Namen '90 something '(wobei etwas das "unsichtbare" Steuerzeichen ist) und eine einzelne Datei mit dem Namen' 90 ', die n- mal überschrieben wurde.
ALLE DATEIEN WURDEN GEGANGEN. : - (((offensichtlich)
Ich wünschte mv
, ich hätte rechtzeitig überprüft, ob die Signatur der Zieldatei (bitte beachten Sie * NIX: Everything Is A File ) mit einem d------
(z drwxr-xr-x
. B. ) beginnt . Und natürlich, ob das Ziel überhaupt existiert . Es ist eine Variante des oben genannten Szenarios, wenn man einfach vergessen zu mkdir
erstem Verzeichnis. (aber natürlich hast du angenommen, dass es da ist ...)
Sogar unser Hass-Betriebssystem, das mit der Hauptstadt W beginnt, tut dies. Sie werden sogar aufgefordert , den Zieltyp (Datei? Verzeichnis?) Anzugeben, wenn Sie danach fragen.
Daher frage ich mich, ob wir * NIXer uns noch ein " mv
Scriptlet" schreiben müssen , um diese Art von unerwünschten Überraschungen zu vermeiden.
mv
Technisch gesehen ist dies nicht das Problem, da nicht bekannt ist, dass Sie eine Reihe von Dateien verschieben. Sie werden mv
einmal für jede Datei ausgeführt. So find -exec ;
funktioniert es. Wenn Sie verwendet hätten find -exec +
(wie in einigen Kommentaren) mv
würde hätte es geschrien, sobald es mehr als ein Argument bekommen hätte.
mv
für jede einzelne Datei auf den ersten Blick weniger durchdacht erscheint, wird es (wie ich bereits sagte) die einzig vernünftige Lösung sein, wenn die Quelldateien auf verschiedene Unterverzeichnisse verteilt sind. Dass sich in meinem Testfall alle Quelldateien in einem Verzeichnis befanden, bedeutet nicht, dass es sich um meinen eigentlichen Testfall handelt. Es ist in der Tat nur eine Vereinfachung, da ich das später leicht selbst ausführen kann. Darüber hinaus ist das Lesen von Fragen aufgrund der kürzeren Länge weniger zeitaufwändig. :)
mv
, dass das Ziel existiert? mv oldfile newfile
ist der Weg, eine Datei umzubenennen, und es ist albern zu erwarten newfile
, dass sie bereits existiert und ein Verzeichnis ist.
.mp3
mit dem Namen vorhanden sein90
, es könnte einer gewesen sein, für den Sie kein Backup hatten.