Czy właśnie usunąłem wszystko poleceniem find -exec mv?

26

Próbowałem to rozgryźć na własną rękę. Oto polecenie, którego użyłem w terminalu:

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

Najpierw nie utworzyłem katalogu o nazwie zdjęcia. To, co się stało, to plik o nazwie pictures.gif został utworzony. Czy znalazł pliki, a następnie je zastąpił, gdy je przesunął?

Co to jest plik images.gif, który został utworzony w wyniku tego polecenia?

Czy pliki nadal są gdzieś na dysku?

jtnewhou
źródło
Przepraszam, że tak się stało i mam nadzieję, że uda ci się odzyskać rzeczy. Mystified by .gif - ciekawie byłoby wiedzieć, co się tam wydarzyło.
SEngstrom
7
Jeśli piszesz nazwę katalogu, dołącz /do niego! Zawsze! Wtedy może to być tylko katalog.
Wyścigi lekkości z Moniką
2
Jak mówi pierwsza odpowiedź: przestań korzystać z tego dysku i spróbuj odzyskać usunięte pliki .jpg. Do tego jednak wolałbym polecić PhotoRec open-source i wieloplatformowy , który zna wiele formatów graficznych (Jpg, ale także różne nieprzetworzone pliki itp.) I jest bardzo dokładny.
Olivier Dulac

Odpowiedzi:

45

Po pierwsze: przestań teraz używać tego napędu . Można go zamontować tylko do odczytu, pamiętaj tylko, aby nie pisać. Tak, usunąłeś zdjęcia. Oni mogą być odzyskane, ale tym bardziej zachować przy użyciu tego dysku, tym mniejsze masz szanse na odzyskanie czegokolwiek.

Twój ran polecenia mv pic1.jpg pictures, mv pic2.jpg picturesitp Każde wywołanie mvzastąpienie pliku obecnie nazwany picturesprzez inny obraz.

Przeniesienie pliku (w tym samym systemie plików) oznacza odłączenie go od katalogu, który go zawiera i dołączenie go do katalogu docelowego pod nową nazwą. Tak więc żadne dane pliku nie zostały zmodyfikowane ani usunięte przez to polecenie, tylko wpisy katalogu dla obrazów, które zniknęły.

Możesz uruchomić narzędzie, które przeszukuje wolne miejsce w systemie plików i szuka rzeczy, które wyglądają jak JPEG. Na szczęście każdy plik jpeg zaczyna się od rozpoznawalnego nagłówka. Narzędzia, które szukają usuniętych treści, nazywane są narzędziami do rzeźbienia . Istnieje kilka w Ubuntu, włączając recoverjpeg , naczelne , TestDisk ... Jeśli zdjęcia są na osobnej partycji głównej lub na zewnętrznym dysku, zainstalować jedną lub więcej z tych pakietów i skierować je na partycję z usuniętych zdjęć.

Jeśli zdjęcia znajdują się na dysku systemowym, musisz natychmiast przestać korzystać z systemu. Użyj innego komputera, aby pobrać Live CD lub USB i uruchomić z tego komputera. Każda z żywych płyt CD, które zawierają dysk testowy, powinna pasować do rachunku, ale niektóre są łatwiejsze w użyciu niż inne. System Rescue CD to dobry systemowy system ratunkowy CD. Ubuntu Rescue Remix może być bardziej znany użytkownikowi Ubuntu.


W celu skorzystania z nich w przyszłości, przyzwyczaj się do używania, mv -ichyba że chcesz zastąpić pliki. Być może masz już alias mv, ale uruchamia się on tylko wtedy, gdy piszesz mvbezpośrednio w wierszu poleceń, a nie wtedy, gdy mvjest wywoływany przez skrypt lub findpolecenie.

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

Ponadto, jeśli wstawisz /po nazwie, która ma być nazwą katalogu, otrzymasz błąd, jeśli katalog nie istnieje lub jeśli istnieje plik o tej nazwie, który nie jest katalogiem.

$ : >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

Aby uniknąć pułapek find, możesz zamiast tego użyć rekurencyjnej funkcji przechodzenia przez katalog bash. Musisz go najpierw włączyć poleceniem shopt -s globstar(możesz dodać ten wiersz do swojego ~/.bashrc. Następnie:

mv **/*.jpg pictures/

(Zauważ, że w bash **/również przegląda dowiązania symboliczne do katalogów i nie ma sposobu, aby to wyłączyć. Jeśli chcesz rekurencyjnego przejścia, które nie przegląda dowiązań symbolicznych do katalogów, użyj zsh lub find.)

Gilles „SO- przestań być zły”
źródło
1
Czy pominąłeś /później picturesw drugim zestawie przykładów? Czy nie powinno być mv foo.jpg pictures/(z /) w obu mvpoleceniach?
Paddy Landau
@PaddyLandau Rzeczywiście, to był naprawdę zły błąd kopiowania-wklejania lub edycji. Dziękuję za raport.
Gilles „SO- przestań być zły”
13

Obawiam się, że właśnie zgubiłeś wszystkie swoje zdjęcia w jednym pliku. Możliwe jest odzyskanie niektórych plików za pomocą narzędzi kryminalistycznych, takich jak przede wszystkim, ale wskaźnik sukcesu spada wraz z korzystaniem z nośnika (dysku). (ściślej mówiąc, im dłuższa jest partycja ).

Następnym razem, gdy masz na myśli katalog, dodaj do niego ukośnik i dodaj -iopcję prośby o potwierdzenie w przypadku, gdy plik już istnieje:

find -name "*.jpg" -exec mv -i {} pictures/ {} \;
Lekensteyn
źródło
6
Tak, muszę ponownie podkreślić: NATYCHMIASTOWE DOSTĘP DO ŚRODOWISKA CD NA ŻYWO! Jeśli chcesz odzyskać te pliki, musisz teraz przestać używać dysku. A jeśli chcesz pobrać i nagrać obraz, zrób to z innego komputera. Im mniej aktywności dzieje się na tym dysku, tym większa szansa na przywrócenie zdjęć.
Oli
Dzięki za to. Najpierw zobaczyłem twoją odpowiedź i natychmiast wyciągnąłem wtyczkę z komputera i uruchomiłem ponownie z dyskiem ratunkowym USB z wieloma uruchomieniami.
jtnewhou