Я щойно видалив усе з find -exec mv?


26

Я спробував це зрозуміти самостійно. Ось команда, яку я використав у терміналі:

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

Я спершу не створив каталог із назвами малюнків. Що сталося, було створено файл з назвою pictures.gif. Він знайшов файли, а потім перезаписав їх під час їх переміщення?

Що таке файл images.gif, який було створено в результаті цієї команди?

Чи все-таки файли десь на диску?


Вибачте, що трапилося з вами, і я сподіваюся, що ви зможете відновити речі. Містифікований .gif - було б цікаво дізнатися, що там сталося.
SEngstrom

7
Якщо ви пишете ім'я каталогу, додайте /його! Завжди! Тоді це може бути лише каталог.
Гонки легкості з Монікою

2
Як і в верхній відповіді, сказано: припиніть використовувати цей диск зараз і спробуйте відновити видалені файли .jpg. Для цього я б краще рекомендував PhotoRec з відкритим кодом та крос-платформним PhotoRec , який знає багато форматів зображень (Jpg, а також різні неочищені файли тощо) і дуже ретельний.
Олів'є Дулак

Відповіді:


45

По-перше: припиніть використовувати цей привід зараз . Добре перераховувати його лише для читання, просто переконайтеся, що більше не пишіть. Так, ви видалили фотографії. Вони можуть бути відновлені, але чим більше ви продовжуєте користуватися цим приводом, тим менше шансів у вас є що-небудь відновити.

Ваша команда пробігла mv pic1.jpg picturesі mv pic2.jpg picturesт. Д. Кожне виклик mvвимикає файл, який в даний час називається picturesіншим зображенням.

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

Ви можете запустити інструмент, який шукає вільний простір вашої файлової системи і шукає речі, схожі на jpegs. На щастя, кожен jpeg-файл починається з розпізнаваного заголовка. Інструменти, які шукають видалений вміст, називаються інструментами різьблення . У Ubuntu є декілька, серед яких recoveryjpeg , перш за все , testdisk ,… Якщо фотографії знаходяться на окремому домашньому розділі або на зовнішньому диску, встановіть один або кілька цих пакетів і вкажіть їх на розділ із видаленими зображеннями.

Якщо фотографії знаходяться на вашому системному диску, вам потрібно негайно припинити використання системи. Використовуйте інший комп’ютер, щоб завантажити живий компакт-диск або USB та завантажуватися з цього. Будь-який з живих компакт-дисків, що містять тестдиск, повинен відповідати рахунку, але деякі простіші у використанні, ніж інші. 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/ {} \;

6
Так, я мушу ще раз підкреслити: ВИДАЙТЕ НЕБЕЗПЕЧНО В ЖИТТЄМУ ЕКОЛОГІЮ CD! Якщо ви хочете повернути ці файли, вам потрібно припинити використання диска зараз. А якщо вам потрібно завантажити та записати зображення, зробіть це з іншого комп’ютера. Чим менше активності відбувається на цьому диску, тим більше шансів відновити фотографії.
Олі

Дякую за це Спочатку я побачив вашу відповідь і негайно витягнув штепсельну вилку на машині та перезавантажив свій рятувальний диск для багатозавантажувальних програм.
jtnewhou
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.