Мне вывели тонны файлов в несколько различных папок. Я попытался организовать их несколько раз, unfortunatly, нет никакой организационной структуры, которая последовательно имеет смысл для всех них.
Я наконец решил записать мне приложение, с которым я могу добавить теги на файлы, затем организация может быть пользовательской к фактической организационной структуре.
Я хочу препятствовать получить осиротевшие данные. Если я перемещаюсь/переименовываю файл, мое приложение тега должно быть сказано об этом так, это может обновить имя в базе данных. Я не хочу это отмечающий файлы, которые больше не существуют, и имеющий необходимость повторно добавить теги для файлов, которые раньше существовали.
Существует ли способ, которым я могу записать обратный вызов, который сцепится в команду mv так, чтобы, если я переименовываю или перемещаю свои файлы, они вызвали сценарий, который уведомит мое приложение, которое может обновить его базу данных?
Мое приложение записано в Ruby, но я готов играть с C при необходимости.
Если вы используете Linux, вы можете использовать inotify ( справочная страница ) для отслеживания каталогов на предмет событий файлов. Похоже, есть рубиновый интерфейс для 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 (и, я думаю, также не для других Unix, кроме Linux), поскольку inotify там не существует.
Можете ли вы контролировать путь ваших пользователей? Поместите сценарий или exe и укажите путь к нему перед стандартной командой mv. Пусть этот сценарий сделает то, что вам нужно, а затем вызовет стандартный mv для выполнения перемещения.
Альтернативно псевдоним в каждом профиле пользователя. Пусть псевдоним вызовет вашу заменяющую команду mv.
Или переименуйте существующую команду mv и поместите замену в тот же каталог, назовите ее mv и пусть она вызовет вашу недавно переименованную команду mv после выполнения того, что вы хотите.