Я сводил себя с ума, пытаясь понять это.

inotifywait -m -r -e close_write --format '%?' folder

Как я могу взять определенный файл, который вызывает это событие и переименовать, а затем переместить его или переместить и переименовать его? Под переименованием я подразумеваю замену пробелов не буквенно-цифровыми символами, такими как подчеркивание, тире и т.д. Приемлемой альтернативой будет добавление или добавление имени файла с уникальным идентификатором для моей цели, чтобы я мог отсортировать их в определенные папки после обработки. Конкретно фильмы окажутся в папке с фильмами и т.д.

У меня есть весь этот аспект обработки, но я не обладаю навыками для достижения моей цели.

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

Может ли он выполнить поиск файла, который был последний раз изменен n секунд назад? Если это так, проверьте тот же файл после 30-секундного сна, чтобы убедиться, что он не изменился, а затем действовать? Мне нужен способ отделить завершенные файлы от файлов, которые не закончили загрузку.

Буду благодарен за любую помощь.

2 ответа2

0

После столь необходимого перерыва я решил сделать еще один шаг в моем первоначальном плане использования inotifywait для запуска процесса переименования / перемещения / преобразования. Было совершенно очевидно, что файл должен был быть создан БОЛЕЕ 60 секунд ранее, чтобы mmin мог перехватить файл (-ы), поэтому сначала запускается триггер, затем 61-секундный спящий режим перед началом переименования.

Я использую iwatch как он позволяет рекурсивность. Пока файлы названы в виде titleS0xExx.ext с цифрами 0-9, заменяющими x, кажется, что он работает нормально. Вот соответствующая часть единственной части, где рекурсия необходима.

watch=/home/terry/New_Video/TV_Show
events=close_write,move_to
excluded=
recursive=false
autoadd=false
command=cd /home/terry/New_Video/TV_Shows
command=sleep 61
command=cd -- "$(find ./ -name "S0" -type f -printf '%h' -quit)"
command=find ./ -type f -mmin +1 -exec rename 's/\ /\%/g' {} \;
command=mv -t /home/terry/Video_Processing/staging *%*
command=find /home/terry/New_Video/TV_Shows -empty -type d -delete

Фильмы и другие папки также нуждаются в 61-секундном сне.

В этом случае задержка не является проблемой. Это не идеальное решение, но оно настолько близко, насколько "чертовски" ругаться.

По какой-то причине он не удалил пустую папку, поэтому может потребоваться некоторая настройка.

0

Ну, так как проблема времени не была критической, я настроил все это как работу cron, ищущую файлы, которые были изменены БОЛЬШЕ за минуту до mmin +1 , ежечасно, и когда я возвращался, мои файлы не были перемещены и на моем терминале было сообщение "нет такого файла или каталога". Я думаю, rename не повторяется.

Несколько часов поиска в Google привели меня на эту страницу: найдите файл, затем перейдите в этот каталог в Linux.

Теперь, начиная с моей новой папки с видео

cd -- "$(find ./ -name "*S0*" -type f -printf '%h' -quit)"
find ./ -type f -mmin +1 -exec rename 's/\ /\%/g' {} \;
mv -t /home/terry/Video_Processing/staging "*%*"

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .