inotifywait close_write не срабатывает, когда папки добавляются в отслеживаемый каталог

Я пытаюсь сделать копию завершенных файлов, которые сохраняются в папку сохранения торрента. Я создал скрипт bash, используя inotifywait для просмотра папки. Мой оригинальный скрипт отлично работал с файлами и папками/подпапками. Как только я заменил -e create -e move_to на -e close_write, он больше не распознает папки, сохраненные в папке просмотра. Теперь работает только с файлами. Причина, по которой мне нужно перейти на это, заключается в том, что многие мои файлы большие (и несколько в папках), и для их полного сохранения требуется некоторое время, а сценарий выполняет все процессы до их завершения.

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

Вот пример моего скрипта. Любое руководство будет оценено. Я не очень хорошо разбираюсь в написании сценариев bash, поэтому извините, если это беспорядок.

WATCHED=/mnt/Seeding
DESTINATION=/mnt/Complete-Torrents
user=userid
group=groupid
perms=777

# Step 1 - Copying completed torrents to Complete-Torrents folder leaving original torrents to seed 
inotifywait -m -e close_write --format %f $WATCHED \
    | while read new
        do
            echo Detected new torrent $new, Copying to Complete-Torrents folder
            cp -r "$WATCHED/$new" "$DESTINATION/"
            wait
                          
# Step 2 - Deleting unwanted files from Complete-Torrents folder

            echo Deleting unwanted files from Complete-Torrents folder
            find $DESTINATION -type f -iname "*.txt" -delete
            find $DESTINATION -type f -iname "*.nfo" -delete
            find $DESTINATION -type f -iname "*.website" -delete
            find $DESTINATION -type f -iname "*.exe" -delete
            find $DESTINATION -type f -iname "*.html" -delete
            find $DESTINATION -type f -iname "*.htm" -delete
            find $DESTINATION -type f -iname "*.sfv" -delete
            find $DESTINATION -type f -iname "*.parts" -delete
            find $DESTINATION -type f -iname "*.jpg" -delete
            find $DESTINATION -type f -iname "*.png" -delete
            find $DESTINATION -type f -iname "*.doc" -delete
            sleep 10
                           
# Step 3 - Change permissions of new files in Complete-Torrents folder

            echo Changing ownership and permissions to Complete-Torrents folder and files
            chown -R $user:$group "$DESTINATION"
            chmod -R $perms "$DESTINATION"
                           
        done

Спасибо, Шон

РЕДАКТИРОВАТЬ...

Я не могу на всю жизнь заставить этот скрипт даже увидеть новую папку, добавленную в папку просмотра. Он буквально НИЧЕГО не делает. Если я заменю close_write на create и moved_to и не внесу никаких других изменений, он увидит папку и содержимое и обработает правильно. Я нахожу это очень странным.

На самом деле я даже пытался сделать небольшой тестовый скрипт, чтобы посмотреть, смогу ли я заставить его работать с оператором if/elif/else, но еще раз, когда я копирую папку в папку просмотра, скрипт ничего не делает (даже не делает к петле). Если я помещаю файл, он обеспечивает правильный вывод.

Вот тестовый скрипт, который я запустил. Может ли кто-нибудь еще подтвердить, может ли он правильно распознать и обработать новую папку?

#!/bin/bash
WATCHED=/mnt/Watched
inotifywait -re close_write --format '%w%f' -m $STEP1_WATCHED \
    | while read -r new
        do
            if [[ -d "$new" ]]; then            
            echo "Detected new folder $new"
            elif [[ -f "$new" ]]; then            
            echo "Detected new file $new"
            else
            echo "neither $new"
            fi
            done
    done

person S. Ray    schedule 15.12.2020    source источник
comment
Что такое $STEP1_WATCHED?   -  person Roadowl    schedule 16.12.2020
comment
У вас не слишком много «сделано» в тестовом сценарии?   -  person Roadowl    schedule 16.12.2020
comment
Я не понимаю,. Вы читали руководство? Что там говорится о том, что делает close_write? Can someone else confirm if they can get a new folder to be recognized and processed correctly? Зачем вам это нужно, после прочтения справочной страницы ясно, что close_write не обнаружит создание новой папки. Он говорит A watched file or a file within a watched directory was closed, after being opened in writeable mode - почему вы ожидаете, что будет обнаружено создание каталога?   -  person KamilCuk    schedule 16.12.2020
comment
Тестовый скрипт работает для меня в моем личном каталоге ~/tmp/, который не слишком глубоко вложен и/или заполнен. Настройка часов может занять некоторое время! Когда часы были настроены, я touch отредактировал файл в каталоге и получил Detected new file /home/<user>/tmp/foo-bar-baz.   -  person Roadowl    schedule 16.12.2020
comment
КамилЧук... Вау. Хороший улов. Да много раз перечитывал мануал и почему-то не заметил, что он относится только к файлам. Я думаю, если бы он сказал, что close_write не обнаружит создание новой папки, я бы это поймал. Но вы правы. Спасибо за улов!   -  person S. Ray    schedule 16.12.2020
comment
Roadowl... Да, вы правы насчет лишнего. KamilCuk указал, что close_write не видит папки, поэтому моя основная проблема на данный момент не является проблемой. Но теперь мне нужно найти другой способ делать то, что мне нужно. Спасибо за помощь.   -  person S. Ray    schedule 16.12.2020
comment
Вы можете -e close_write -e create -e moved_to и, если обнаружите создание папки, затем рекурсивно обнаружить изменения в этой папке. Но такой дизайн потребует некоторых скриптов.   -  person KamilCuk    schedule 16.12.2020
comment
Хм... Надо будет подумать над этим. Я думаю, я могу закрыть свои 50 или около того вкладок и начать все заново с этой идеей. РЖУ НЕ МОГУ. КамилЧук, спасибо!   -  person S. Ray    schedule 16.12.2020
comment
Roadowl... Извините за ошибки в моем тестовом коде. Мне пришлось копировать и вставлять фрагменты из других сценариев, чтобы быстро собрать их воедино. Хороший улов! Спасибо   -  person S. Ray    schedule 16.12.2020


Ответы (1)


Оказывается, проблема здесь была моей ошибкой. За все время чтения руководства по inotify я как-то не уловил, что это работает только для файлов, а не для папок. Очевидно, я искал что-то конкретное и упустил из виду то, что в руководстве говорилось о close_write.

Спасибо всем, кто помог!

person S. Ray    schedule 15.12.2020