Unix вызывает скрипт при перемещении файла - PullRequest
1 голос
/ 26 июня 2010

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

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

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

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

Мое приложение написано на Ruby, но я хочу поиграть с C, если необходимо.

Ответы [ 2 ]

2 голосов
/ 26 июня 2010

Если вы используете Linux, вы можете использовать inotify ( manpage ), чтобы отслеживать каталоги для событий файлов.Кажется, есть интерфейс ruby ​​для inotify .

Из Википедии:

Some of the events that can be monitored for are:
IN_ACCESS - read of the file
IN_MODIFY - last modification
IN_ATTRIB - attributes of file change
IN_OPEN and IN_CLOSE - open or close of file
IN_MOVED_FROM and IN_MOVED_TO - when the file is moved or renamed
IN_DELETE - a file/directory deleted
IN_CREATE - a file in a watched directory is created
IN_DELETE_SELF - file monitored is deleted

Это не работает для Windows (и я думаю, что не для других Unicesкроме Linux), поскольку inotify там не существует.

0 голосов
/ 26 июня 2010

Можете ли вы контролировать путь своих пользователей? Поместите скрипт или исполняемый файл и укажите путь к нему перед стандартной командой mv. Пусть этот скрипт сделает то, что вам нужно, а затем вызовет стандартную mv для выполнения перемещения.

Альтернативно псевдоним в каждом профиле пользователя. Пусть псевдоним вызовет команду замены mv.

Или переименуйте существующую команду mv и поместите замену в тот же каталог, назовите ее mv, и после того, как вы захотите, вызовите только что переименованную команду mv.

...