Frage

ich oft den Befehl wie:

mv folder $something_that_does_not_exist
mv files* $something_that_does_not_exist

Dann merke ich, dass meine Dateien sind verschwunden. Ich kann sehen, wie sie nicht einmal in dem Ordner „$ something_that_does_not_exist“. Wo sind meine Dateien und Ordner gegangen? Wie kann ich sie zurück?

War es hilfreich?

Lösung

Um dieses Problem zu vermeiden, habe ich eine Gewohnheit, immer a / bis zum Ende der Verzeichnisnamen anhängen, wenn cp oder mv mit:

$ touch foo
$ mv foo bar/
mv: cannot move `foo' to `bar/foo': No such file or directory

Ohne den Schrägstrich, mv hat eine Datei Umbenennungsvorgang. Sie können feststellen, dass Ihre Datei (en) Namen geändert hat.

Andere Tipps

Wenn $something_that_does_not_exist nichts erweitert (aber ich bin nicht sicher, ob das Ihr Problem ist?), Dann die erste mv fehl. Der zweite Befehl mv scheitern wird auch, es sei denn "files*" genau zwei Dateien erweitern oder wenn der letzte Dateiname "files*" erweitert passiert ein Verzeichnis zu sein. Dann werden die Dateien in diesem Verzeichnis verschoben werden.

Wenn der Befehl in einem Skript, und Sie mögen Ihr Skript abzubrechen, wenn sie versuchen, die Variable zu erweitern und es nicht gesetzt ist, können Sie auf den Fragezeichen-Modifikator verwenden. Beispiel:

$ echo ${DISPLAY?}; echo display
:0.0
display
$ echo ${MYTEST?}; echo mytest
bash: MYTEST: parameter null or not set
$

Also, wenn Sie verwenden

mv folder ${something_that_does_not_exist?}

und something_that_does_not_exist nicht gesetzt ist, Befehle folgenden nicht ausgeführt werden.

Sie werden Ihre Dateien nicht zurück sein können, wie die Shell-Dateien erweitern und ich glaube, die letzte Datei auf der Liste wird nun $ something_that_does_not_exist genannt werden.

Alle anderen Dateien in der Liste überschrieben wurden. So können Sie sie nicht zurück.

EDIT: Auf meinem glattwandigen VM (das einzig GNU / Linux an meinem Finger jetzt!) Bekomme ich diese:

$ mkdir t1
$ mv t1 t2
$ ls
t2/
$ mv t2 t1
$ cd t1
$ touch f1 f2 f3 f4
$ mv f* ../t2
mv: target `../t2' is not a directory
mv folder $something_that_does_not_exist

Dies sollte ein Fehler sein:

$ mkdir folder
$ mv folder
mv: Insufficient arguments (1)
Usage: mv [-f] [-i] f1 f2
       mv [-f] [-i] f1 ... fn d1
       mv [-f] [-i] d1 d2

Der andere Fall hängt davon ab, was files* abgestimmt:

mv files* $something_that_does_not_exist

Wenn das Endspiel ein Verzeichnis ist, werden Sie wahrscheinlich Ihre Dateien dort finden. Andernfalls müssen Sie entweder die erste Datei die gleiche wie die zweite oder hatte einen anderen Fehler wie oben.

umbenannt werden

1) Sie versuchen, das Verzeichnis "Ordner" zu verschieben:

mv folder abcde

Wenn „ABCDE“ ist ein bestehendes Verzeichnis, wird es „Ordner“ in „ABCDE“ bewegen. Wenn „ABCDE“ ist eine vorhandene Datei, wird der Befehl fehl. Sonst wird es umbenennen „Ordner“ auf „ABCDE“.

2) Sie versuchen, einige Dateien zu verschieben:

mv files* abcde

Wenn „ABCDE“ ist ein bestehendes Verzeichnis, wird es die „Dateien *“ bewegt sich in „ABCDE“. Andernfalls, wenn es nur eine Datei matching „Dateien *“ ist, wird es die Datei zu „ABCDE“ umbenennen. Andernfalls wird der Befehl fehl.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top