Linux - Восстановление файла - PullRequest
1 голос
/ 11 ноября 2010

Я написал простой базовый скрипт оболочки, который перемещает указанный файл в каталог мусорной корзины.Сценарий выглядит следующим образом:

#!/bin/bash
#move items to dustbin directory
mv "$@" ~/dustbin/
echo "File moved to dustbin"

Это прекрасно работает для меня, любой указанный мной файл перемещается в каталог мусорной корзины.Однако я хотел бы создать новый сценарий, который переместит файл из каталога мусорной корзины обратно в исходный каталог.Я знаю, что мог бы легко написать сценарий, который переместил бы его назад в местоположение, указанное пользователем, но я предпочел бы иметь тот, который переместил бы его в его исходный каталог.

Возможно ли это?

Я использую Mac OS X 10.6.4 и терминал

Ответы [ 4 ]

3 голосов
/ 11 ноября 2010

Вам нужно будет сохранить исходный файл. Может быть, в отдельном файле, базе данных или в атрибутах файлов (метаданных).

Создать файл журнала с 2 столбцами:

  1. Полное имя файла в мусорном ящике
  2. Полный исходный путь и имя файла

Вам все равно понадобится этот файл журнала - что вы будете делать, когда пользователь удалил 2 файла в разных каталогах, но с одинаковым именем? /home/user/.wgetrc и /home/user/old/.wgetrc?

Что вы будете делать, когда пользователь удаляет файл, создает новый с тем же именем, а затем удаляет его тоже? Вам понадобятся версии или временные метки или что-то.

1 голос
/ 11 ноября 2010

Другим подходом было бы позволить файловой системе быть вашей базой данных.

Файл, перемещенный из /some/directory/somewhere/filename, будет перемещен в ~/dustbin/some/directory/somewhere/filename, и вы сделаете find ~/dustbin -name "$file", чтобы найти его по его базовому имени (из ввода пользователя). Тогда вы просто удалите "~ / bustbin" из вывода find, и у вас будет готовый пункт назначения. Если find возвращает более одного файла, вы можете перечислить предложенные файлы для выбора пользователя. Вы можете использовать ~/dustbin/$deletiondate, если хотите сделать возможным откат к более ранним версиям.

Вы можете выполнить работу cron, которая будет периодически удалять старые файлы и каталоги (если они пусты).

1 голос
/ 11 ноября 2010

Вам нужно как-то кодировать исходный каталог в файле.Я думаю, что проще всего было бы изменить имя файла в каталоге мусорной корзины.Так что / home / user / music / song.mp3 становится ~ / dustbin / song.mp3 | home_user_music

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

1 голос
/ 11 ноября 2010

Вам нужно где-то сохранить исходное местоположение, либо в базе данных, либо в расширенном атрибуте файла.База данных, безусловно, самый простой способ сделать это, хотя расширенный атрибут был бы более надежным.Глядя в ~ / .Trash / я вижу некоторые, но не все файлы имеют расширенные атрибуты, поэтому я не уверен, как Apple это делает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...