Was ist passiert, als ich "mv *"? Es wurden keine Fehler angezeigt und es ist nur noch ein Ordner übrig. Warum?


12

Der ausgeführte Befehl lautete "mv space *" in einem Ordner mit 14 GB Daten.

mv *

du -hs 

ist das auch so wo sind die 14 gb daten geblieben? Was habe ich gemacht?


Weitere Informationen werden benötigt. Welche Plattform?
Jarmund

4
@Jarmund Ich denke, es ist sicher, einige * nix anzunehmen, wenn man bedenkt, dass beide genannten Befehle auf Unix-ähnlichen Systemen übliche Befehle sind. In dieser Hinsicht kann man mit Sicherheit sagen, dass die meisten Shells gleich funktionieren. So können wir genug herleiten, um eine nützliche Antwort zu geben, obwohl die genaue Plattform nicht explizit angegeben ist.
ein CVn


Eine weitere Falle zu erwähnen. Sie sollten NIEMALS mvoder cpmit " " nicht vertrauenswürdigen Daten ausführen . Das liegt daran, dass " " Dateien mit Namen wie "--verbose" erweitert und Befehlszeilenargumente abgerufen werden. Was Sie stattdessen verwenden sollten:cp ./* anotherFolder
VasyaNovikov

Antworten:


30

Ich vermute, dass Bash den Platzhalter erweitert und somit jeden Ordner in den letzten verschiebt.

Beispielsweise:

$ ls
test1  test2  test3  test4

$ mv *

$ ls
test4

$ ls test4
test1  test2  test3

Hier mv *wird mv test1 test2 test3 test4entsprechend zum mv [OPTION]... SOURCE... DIRECTORYFormat erweitert. Somit wird jeder Ordner in den letzten verschoben.


9
Dies. Übrigens, wenn Sie *in einem mv(oder cp) verwenden möchten, dann werfen Sie einen Blick auf deren --target-directorySchalter. Es stellt sicher, dass Sie nicht von solchen Dingen gebissen werden.
ein CVn

2

Wie von @ssssteffff mit beschrieben mv *, erweitert die Shell die Platzhalter aus Dateien im aktuellen Verzeichnis. Das Verhalten des mvBefehls hängt jedoch davon ab, wie viele Argumente verwendet werden *. Wenn es mehr als zwei Argumente gibt, muss das letzte Argument ein Verzeichnis sein:

   mv [OPTION]... SOURCE... DIRECTORY

So,

Ich habe 5 Dateien erstellt

$ touch 1 2 3 4 5
$ ls
1  2  3  4  5
$ mv *
mv: target ‘5’ is not a directory
$ ls
1  2  3  4  5

Wenn ich nun ein Verzeichnis erstelle, das als letzter Parameter zur Platzhaltererweiterung dient, dann:

$ mkdir 6
$ mv *
$ ls
6
$ ls 6
1  2  3  4  5

Sie sollten überprüfen, was das letzte Argument war.

  • Wenn das letzte Argument ein Verzeichnis war, dann sind Ihre Daten vielleicht sicher.
  • Wenn die Gesamtzahl der Argumente 2 war und das letzte Argument ein Verzeichnis war, dann sind möglicherweise auch Ihre Daten sicher.
  • Wenn die Gesamtzahl der Argumente 2 betrug und das letzte Argument eine Datei war, ist die zweite Datei mit Sicherheit verschwunden.

Sind Sie sicher, dass Sie den Fehler nicht so gesehen haben?

 mv: target ‘5’ is not a directory`
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.