Ich habe den Verschiebebefehl verwendet und alle Dateien sind verschwunden

Ich habe den Verschiebebefehl verwendet und alle Dateien sind verschwunden

Ich habe alle Daten in einen anderen Ordner verschoben und dabei einen Fehler gemacht und diesen Befehl ausgeführt

mv * /*

alle Dateien sind jetzt verschwunden. Wie kann ich sie finden? Oder sind sie gelöscht?

Antwort1

Alle Platzhalter wie *werden von der Shell erweitert und an den Befehl übergeben. Das bedeutet, dass der erste Stern durch die Dateien in Ihrem aktuellen Arbeitsverzeichnis ersetzt wurde und der zweite durch alle Dateien in /. Sie können dies sehen, indem Sie ausführen

echo /*

Auf meinem System führt das zu

/bin /boot /dev /etc /home /lib /lib64 /lost+found /media
/misc /mnt /opt /proc /root /run /sbin /srv /sys /tmp /usr /var

Ihr Befehl lautete also in etwa:

mv file1 file2 ... ... ... /tmp /usr /var

Dadurch wird alles nach verschoben /var. Was genau zuletzt war, kann auf Ihrem System natürlich unterschiedlich sein. Was auch immer es ist, Sie werden Ihre Dateien wahrscheinlich dort finden.

Ich gehe davon aus, dass Sie als Root ausgeführt haben. Andernfalls könnten Sie die meisten Verzeichnisse nicht in / schreiben, sodass nichts passiert wäre. Seien Sie besonders vorsichtig, wenn Sie als Root ausgeführt werden, und vermeiden Sie dies, wenn möglich.

Antwort2

Ich habe dabei eine gute Beobachtung gemacht:

mkdir test; cd test; mkdir t1 t2 t3
cd ~/
mkdir testmove;
cd testmove;
touch abcd
mv * ~/test/*

Hier ist der interessante Teil, die Datei „abcd“ wird zusammen mit den Verzeichnissen t1 und t2 in das Verzeichnis t3 verschoben, und zwar:

ls test
-> t3
cd t3
ls 
t1 t2 abcd

was ich verstanden habe ist, dass wenn wir * schreiben, der Befehl tatsächlich erweitert und dann ausgeführt wird, so dass der mv-Befehl erweitert wird als

mv abcd ~/test/t1 ~/test/t2 ~/test/t3

Daher nahm es t3 als Ziel und bewegte sich abcd, t1, t2 nach t3

Um Ihre Frage zu beantworten: Es befindet sich im letzten Verzeichnis in /

Aus der Manpage oder mvwenn Sie einen Symlink haben

Avoid specifying a source name with a trailing slash,
when it might be a symlink to a directory.  Otherwise, `mv' may do
something very surprising, since its behavior depends on the underlying
rename system call.  On a system with a modern Linux-based kernel, it
fails with `errno=ENOTDIR'.  However, on other systems (at least
FreeBSD 6.1 and Solaris 10) it silently renames not the symlink but
rather the directory referenced by the symlink.  *Note Trailing
slashes::.

Sie können nach Ihrer Datei suchen mitfind / -type f -name <filename>

verwandte Informationen