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 mv
wenn 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>