Wie bekomme ich Dateien nach "mv*.*" zurück?

Wie bekomme ich Dateien nach "mv*.*" zurück?

Ich habe einige Dateien mit dem folgenden Befehl ausgeblendet:

mv * .*

aber jetzt kann ich sie nicht finden. Ich habe versucht, Folgendes zu verwenden:

mv .* *

aber nichts ist passiert (ein Fehler wurde angezeigt). Wenn ich ausführe:

ls -la

es zeigt:

total 8  
drwxrwxr-x 2 abhishek abhishek 4096 Mar  9 20:46 .  
drwxrwxr-x 4 abhishek abhishek 4096 Mar  9 20:46 ..  

Gibt es eine Möglichkeit, meine versteckten Dateien wiederherzustellen?

Antwort1

Ihre Dateien sind nicht ausgeblendet, Sie haben alle Dateien (und Verzeichnisse, falls vorhanden) ein Verzeichnis nach oben verschoben.

Dies geschieht, weil mv * .*es nicht so funktioniert, wie Sie es sich vorstellen. Der Befehl mvverschiebt nur eine Datei in eine Datei (umbenennen) oder verschiebt eine oder mehrere Dateien in ein Verzeichnis. Mehrere Dateien werden nicht durch intelligentes Umbenennen in mehrere Dateien verschoben.


Was ist passiert?

Nehmen wir an, wir haben ein Verzeichnis und 3 Dateien in unserem Verzeichnis:

dir1
file1
file2
file3

Einige Shells (z. B. bash, dash, ...) erweitern Ihren Befehl wie folgt:

mv dir1 file1 file2 file3 . ..

Ihr erweiterter Befehl passt zur zweiten Form der SYNOPSIS, die Sie unter folgendem Link finden man mv:

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

Beachten Sie die .und ..:

  • .ist das aktuelle Verzeichnis,
  • ..ist ein Verzeichnis höher.

Der Befehl bedeutet: verschiebe dir1, file1, file2und file3und .nach ..; Außerdem wird im Wesentlichen ein Fehler ausgegeben, etwa wie:

mv: cannot move '.' to '../.'

Da Sie jedoch Schreibrechte für dieses Verzeichnis haben, wurden alle anderen Dateien verschoben. Sie finden Ihre Dateien nun in ..(= ein Verzeichnis höher). Dateien mit demselben Namen wurden jedoch überschrieben und Sie wissen nicht, welche Dateien sich vorher in welchem ​​Verzeichnis befanden.


Wenn Sie ein Unterverzeichnis hätten .hidden-dir, wäre es wie folgt erweitert worden:

mv dir1 file1 file2 file3 . .. .hidden-dir

Dann wären alle Dateien nach verschoben worden .hidden-dir. Dies scheint bei Ihnen jedoch nicht der Fall zu sein, da Sie .hidden-dirin Ihrer ls -laAusgabe Folgendes gesehen hätten.


Wie repariert man

Laufen:

mv ../dir1 ../file1 ../file2 ../file3 .

Allerdings müssen Sie die Namen kennen.


Was Sie hätten verwenden sollen

mmv '*' '.#1'

oder

rename 's/^/./' *

verwandte Informationen