Я только что все удалил с помощью команды find -exec mv?

26

Я пытался понять это самостоятельно. Вот команда, которую я использовал в терминале:

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

Я не создал каталог с именем картинки в первую очередь. Произошел файл с именем pictures.gif. Нашел ли он файлы, затем переписал их при перемещении?

Что это за файл pictures.gif, созданный в результате выполнения этой команды?

Возможно, файлы еще где-то на диске?

jtnewhou
источник
Извините, что случилось с вами, и я надеюсь, что вы можете восстановить вещи. Мистифицированный .gif - было бы интересно узнать, что там произошло.
SEngstrom
7
Если вы пишете название каталога, добавьте /его! Всегда! Тогда это может быть только каталог.
Легкость гонки с Моникой
2
Как показано в верхнем ответе: прекратите использовать этот диск сейчас и попытайтесь восстановить удаленные файлы .jpg. Для этого, однако, я бы лучше порекомендовал PhotoRec с открытым исходным кодом и кроссплатформенный , который знает много форматов изображений (Jpg, но также и различные необработанные файлы и т. Д.) И очень тщательный.
Оливье Дюлак

Ответы:

45

Во-первых: прекратите использовать этот диск сейчас . Это нормально, чтобы перемонтировать его только для чтения, просто убедитесь, что больше не пишите. Да, вы удалили фотографии. Они могут быть восстановлены, но чем больше вы продолжаете использовать этот диск, тем меньше у вас шансов что-либо восстановить.

Ваша команда RAN mv pic1.jpg pictures, mv pic2.jpg picturesи т.д. Каждый вызов mvпереписал в данный момент файл с именем picturesдругой картиной.

Перемещение файла (в той же файловой системе) означает отсоединение его от каталога, в котором он находится, и присоединение его к целевому каталогу под новым именем. Таким образом, никакие данные файла не были изменены или удалены этой командой, только записи каталога для исчезнувших изображений.

Вы можете запустить инструмент, который ищет свободное место в вашей файловой системе и ищет вещи, похожие на jpegs. К счастью, каждый файл JPEG начинается с распознаваемого заголовка. Инструменты, которые ищут удаленный контент, называются инструментами вырезания . В Ubuntu есть несколько таких, в том числе recoveryjpeg , прежде всего , testdisk ... Если фотографии находятся в отдельном домашнем разделе или на внешнем диске, установите один или несколько из этих пакетов и укажите их в разделе с удаленными изображениями.

Если фотографии находятся на вашем системном диске, вам необходимо немедленно прекратить использование вашей системы. Используйте другой компьютер для загрузки живого CD или USB и загрузитесь с него. Любой из живых компакт-дисков, которые включают testdisk, должен соответствовать всем требованиям, но некоторые легче использовать, чем другие. System Rescue CD - хороший компакт-диск для восстановления системы. Ubuntu Rescue Remix может быть более привычным для пользователя Ubuntu.


Для дальнейшего использования возьмите в привычку использовать, mv -iесли вы не хотите перезаписывать файлы. Возможно, у вас уже есть псевдоним для mv, но он срабатывает только тогда, когда вы печатаете mvнепосредственно в командной строке, а не когда mvвызывается скриптом или findкомандой.

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

Кроме того, если вы поставите /после имени, которое должно быть именем каталога, вы получите сообщение об ошибке, если каталог не существует или если существует файл с таким именем, который не является каталогом.

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

Чтобы избежать ловушек find, вы можете использовать рекурсивную функцию обхода каталога bash. Вы должны сначала включить его с помощью команды shopt -s globstar(вы можете добавить эту строку в вашу ~/.bashrc. Затем:

mv **/*.jpg pictures/

(Обратите внимание, что в bash **/также проходит символические ссылки на каталоги, и отключить это невозможно. Если вам нужен рекурсивный обход, который не просматривает символические ссылки на каталоги, используйте zsh или find.)

Жиль "ТАК - перестань быть злым"
источник
1
Вы пропустили /после picturesво втором наборе примеров? Т.е. не должно ли быть mv foo.jpg pictures//) в обеих mvкомандах?
Пэдди Ландау
@PaddyLandau Действительно, это была действительно плохая ошибка копирования-вставки или редактирования. Спасибо за отчет.
Жиль "ТАК - перестань быть злым"
13

Я боюсь, что вы только что потеряли все свои фотографии в этот файл. Можно восстановить некоторые файлы, используя, прежде всего, криминалистические инструменты , но вероятность успеха снижается, чем дольше вы используете носитель (диск). (если быть точным, то чем дольше смонтирована перегородка .)

В следующий раз, когда вы имеете в виду каталог, добавьте в него косую черту и добавьте -iопцию для запроса подтверждения в случае, если файл уже существует:

find -name "*.jpg" -exec mv -i {} pictures/ {} \;
Lekensteyn
источник
6
Да, я должен еще раз подчеркнуть: НЕМЕДЛЕННО ПОЛУЧИТЕ В СРЕДУ LIVE CD! Если вы хотите вернуть эти файлы, вам нужно прекратить использование диска сейчас. А если вам нужно скачать и записать изображение, сделайте это с другого компьютера. Чем меньше активности на этом диске, тем больше шансов на восстановление ваших фотографий.
Оли
Спасибо за это. Сначала я увидел ваш ответ, сразу же вытащил вилку из машины и перезагрузился с моим мультизагрузочным USB-диском.
Jtnewhou