LINUX.ORG.RU

BASH найти «новые» папки и передать их в качестве параметра

 


0

1

Здравствуйте, необходимо с определенной периодичностью, например каждую минуту проверять директорию на наличие в ней новых директорий и передавать их какой-либо команде. Например так, запускаем скрипт и с момента его запуска передаем другой команде все то, что будет появляется в ней новое с момента запуска скрипта, но при этом выдерживать задержку в 30 секунд.

Подскажите, как это сделать, если можно то с примером, хотябы приблизительным.


Смотря что вы хотите.

Появляющиеся (создаваемые) новые каталоги — это постоянно формировать список (массив) и сравнивать его с предыдущим, сформированным 30 секунд назад.

Изменённые каталога за последние 30 секунд — это ″ find -cnewer″. Создавать на каждый запуск по файлу и find'ом смотреть, что было в интервале между текущим и предыдущим запуском. Потом файл от предыдущего запуска удалять.

Отслеживать события на каталоге — dnotify.

И, если в именах каталогов могут быть пробелы и прочие «не буквы», ИМХО, лучше с bash'е не связываться, а взять какой-нибудь python.

mky ★★★★★
()

Если есть уверенность, что в именах директорий не будет переносов строк, то можно так:

#!/usr/bin/bash

WATCH_DIR='/path/to/your/dir'

function myfunc {
    new_dir=$1
    sleep 30
    echo "Working on $new_dir ..."
    echo "Done."
}

inotifywait -m -e create --format %f "$WATCH_DIR" \
| while read new_dir; do 
    if [ -d "$WATCH_DIR/$new_dir" ]; then 
        myfunc "$WATCH_DIR/$new_dir" &
    fi
done 

Если же переносы могут быть, то лучше взять нормальный язык и его интерфейс к inotify.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.