2009-05-01 3 views

Antwort

7

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 Dateioperation Umbenennen . Sie können feststellen, dass Ihre Datei (en) ihren Namen geändert haben.

0

Sie werden nicht in der Lage sein, Ihre Dateien zurück zu bekommen, da die Shell Ihre Dateien erweitern wird und ich glaube, dass die letzte Datei in der Liste jetzt $ something_that_does_not_exist heißt.

Alle Ihre anderen Dateien in der Liste wurden überschrieben. Du kannst sie also nicht zurückbekommen.

EDIT: Auf meinem glattwandigen VM (! Die einzige GNU/Linux auf jetzt meine Finger) 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 
+0

Ok, meine schlechte Annahme war, dass $ something_that_does_not_exist etwas war, das Sie eingeben würden, keine Shell-Variable. Wie andere gesagt haben, wird dies scheitern – Wayne

+0

Ich denke, ist eine Witz Frage, so mv-Dateien */dev/null ist wahrscheinlich die bessere Antwort :) – Wayne

2

Wenn $something_that_does_not_exist nichts erweitert (aber ich bin nicht sicher, ob das Ihr Problem ?) dann wird der erste mv fehlschlagen. Der zweite mv-Befehl schlägt auch fehl, wenn "files*" nicht auf genau zwei Dateien erweitert wird oder wenn der letzte Dateiname "files*" expandiert, um ein Verzeichnis zu sein. Dann werden die Dateien in dieses Verzeichnis verschoben.

Wenn sich der Befehl in einem Skript befindet und Sie möchten, dass Ihr Skript beim Versuch, die Variable zu erweitern, abgebrochen wird, und es nicht festgelegt ist, können Sie den Fragezeichenmodifikator verwenden. Beispiel:

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

Also, wenn Sie

mv folder ${something_that_does_not_exist?} 

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

+1

Sie sind auf dem richtigen Weg. Das Ereignis bezieht sich auf den letzten Befehl. Ich argumentierte falsch, dass das erste Ding auftreten würde, als ich das letzte Ding bemerkte. Ich bin immer noch ziemlich verwirrt warum das Ding passiert. –

0
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 finden Sie Ihre Dateien dort. Andernfalls haben Sie entweder die erste Datei umbenannt, um die gleiche wie die zweite Datei zu sein, oder einen anderen Fehler wie oben.

0

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" eine vorhandene Datei ist, wird der Befehl fehlschlagen. Andernfalls wird "Ordner" in "abcde" umbenannt.

2) Sie versuchen, einige Dateien zu verschieben:

mv files* abcde 

Wenn "ABCDE" ist ein bestehendes Verzeichnis, wird es die "Dateien *" bewegen sich in "ABCDE". Andernfalls, wenn nur eine Datei mit "files *" übereinstimmt, wird diese Datei in "abcde" umbenannt. Andernfalls wird der Befehl fehlschlagen.