Habe ich gerade alles mit find -exec mv gelöscht?

26

Ich habe versucht, das selbst herauszufinden. Hier ist der Befehl, den ich im Terminal verwendet habe:

find . -name "*.jpg" -exec mv {} pictures \;

Ich habe zuerst kein Verzeichnis mit dem Namen pictures erstellt. Was passiert ist, ist eine Datei namens pictures.gif erstellt worden. Wurden die Dateien beim Verschieben überschrieben?

Was ist die Datei pictures.gif, die aufgrund dieses Befehls erstellt wurde?

Befinden sich die Dateien möglicherweise noch irgendwo auf dem Laufwerk?

jtnewhou
quelle
Tut mir leid, dass dir das passiert ist und ich hoffe, du kannst Sachen wiederherstellen. Durch die .gif mystifiziert - wäre interessant zu wissen, was dort passiert ist.
SEngstrom
7
Wenn Sie den Namen eines Verzeichnisses schreiben, hängen /Sie ihn an! Immer! Dann kann es immer nur ein Verzeichnis sein.
Leichtigkeit Rennen mit Monica
2
Wie die Antwort oben schon sagt: Verwenden Sie dieses Laufwerk jetzt nicht mehr und versuchen Sie, die gelöschten JPG-Dateien wiederherzustellen. Dafür empfehle ich jedoch lieber Open Source und plattformübergreifendes PhotoRec , das viele Bildformate (Jpg, aber auch verschiedene Rohdateien usw.) kennt und sehr gründlich ist.
Olivier Dulac

Antworten:

45

Erstens: Verwenden Sie dieses Laufwerk jetzt nicht mehr . Es ist in Ordnung, es nur mit Lesezugriff erneut einzuhängen. Stellen Sie jedoch sicher, dass Sie keine weiteren Schreibvorgänge ausführen. Ja, Sie haben die Bilder gelöscht. Sie können zwar wiederhergestellt werden, aber je mehr Sie dieses Laufwerk weiterhin verwenden, desto geringer ist die Wahrscheinlichkeit, dass Sie etwas wiederherstellen müssen.

Ihr Befehl ausgeführt wird mv pic1.jpg pictures, mv pic2.jpg picturesusw. Jeder Aufruf mvüberschrieben haben die Datei zur Zeit benanntpictures durch ein anderes Bild.

Das Verschieben einer Datei (innerhalb desselben Dateisystems) bedeutet, sie von dem Verzeichnis zu trennen, in dem sie enthalten ist, und sie unter dem neuen Namen an das Zielverzeichnis anzuhängen. Mit diesem Befehl wurden also keine Dateidaten geändert oder gelöscht, sondern nur die Verzeichniseinträge für die verschwundenen Bilder.

Sie können ein Tool ausführen, das den freien Speicher Ihres Dateisystems durchsucht und nach Dingen sucht, die wie JPEGs aussehen. Glücklicherweise beginnt jede JPEG-Datei mit einem erkennbaren Header. Werkzeuge, die nach gelöschten Inhalten suchen, werden als Schnitzwerkzeuge bezeichnet . Es gibt einige in Ubuntu, einschließlich recoverjpeg , foremost , testdisk , ... Wenn sich die Fotos auf einer separaten Home-Partition oder einem externen Laufwerk befinden, installieren Sie eines oder mehrere dieser Pakete und verweisen Sie sie auf die Partition mit den gelöschten Bildern.

Wenn sich die Fotos auf Ihrer Systemfestplatte befinden, müssen Sie die Verwendung Ihres Systems sofort beenden. Verwenden Sie einen anderen Computer, um eine Live-CD oder einen USB-Stick herunterzuladen und von dort zu booten. Alle Live-CDs, die Testdisk enthalten, sollten in die Rechnung passen, aber einige sind einfacher zu verwenden als andere. System Rescue CD ist eine gute Allzweck-System-Rettungs-CD. Ubuntu Rescue Remix ist für Ubuntu-Benutzer möglicherweise vertrauter.


Gewöhnen Sie sich zum späteren Nachschlagen an, es mv -isei denn, Sie möchten Dateien überschreiben. Möglicherweise haben Sie bereits einen Alias ​​für mv, dieser wird jedoch nur aktiviert, wenn Sie mvdirekt in die Befehlszeile eingeben, und nicht, wenn er mvvon einem Skript oder vom findBefehl aufgerufen wird .

$ : >pictures
$ mv -i foo.jpg pictures
mv: overwrite `pictures'?

Wenn Sie /nach einem Namen ein setzen, der der Name eines Verzeichnisses sein soll, wird eine Fehlermeldung angezeigt, wenn das Verzeichnis nicht vorhanden ist oder wenn es eine Datei mit diesem Namen gibt, die kein Verzeichnis ist.

$ : >pictures
$ mv foo.jpg pictures/
mv: cannot move `foo.jpg' to `pictures/': Not a directory
$ rm pictures
$ mv foo.jpg pictures/
mv: cannot move `foo.jpg' to `pictures/': Not a directory

Um die Fallstricke von zu vermeiden find, können Sie stattdessen die Funktion zum rekursiven Durchlaufen von Verzeichnissen von bash verwenden. Sie müssen es zuerst mit dem Befehl einschalten shopt -s globstar(Sie können diese Zeile zu Ihrer hinzufügen ~/.bashrc. Dann:

mv **/*.jpg pictures/

(Beachten Sie, dass in bash **/auch symbolische Links zu Verzeichnissen durchlaufen und dies nicht deaktiviert werden kann. Wenn Sie eine rekursive Durchquerung wünschen, die keine symbolischen Links zu Verzeichnissen durchläuft, verwenden Sie zsh oder find.)

Gilles 'SO - hör auf böse zu sein'
quelle
1
Haben Sie das /After picturesin der zweiten Reihe von Beispielen weggelassen? Dh, sollte es nicht mv foo.jpg pictures/(mit dem /) in beiden mvBefehlen sein?
Paddy Landau
@PaddyLandau In der Tat war dies ein wirklich schlechter Kopier- oder Bearbeitungsfehler. Danke für den Bericht.
Gilles 'SO- hör auf böse zu sein'
13

Ich fürchte, Sie haben gerade alle Ihre Bilder in dieser einzigen Datei verloren. Es ist möglich, einige Dateien mit forensischen Tools wie foremost wiederherzustellen. Die Erfolgsrate sinkt jedoch, je länger Sie das Medium (die Festplatte) verwenden. (Um genau zu sein, je länger die Partition gemountet ist .)

Wenn Sie das nächste Mal ein Verzeichnis meinen, fügen Sie einen Schrägstrich hinzu und fügen Sie die -iOption hinzu, nach einer Bestätigung zu fragen, falls eine Datei bereits vorhanden ist:

find -name "*.jpg" -exec mv -i {} pictures/ {} \;
Lekensteyn
quelle
6
Ja, ich muss noch einmal betonen: GET IN EINE LIVE-CD-UMGEBUNG SOFORT! Wenn Sie diese Dateien wiederherstellen möchten, müssen Sie das Laufwerk jetzt nicht mehr verwenden. Und wenn Sie ein Image herunterladen und brennen müssen, tun Sie dies von einem anderen Computer. Je weniger Aktivitäten auf dieser Festplatte stattfinden, desto höher ist die Wahrscheinlichkeit, dass Ihre Fotos wiederhergestellt werden.
Oli
Danke dafür. Ich habe Ihre Antwort zuerst gesehen und sofort den Stecker gezogen und mit meiner Multiboot-USB-Rettungsdiskette neu gestartet.
Jtnewhou