Како извршити задатак када се нова датотека дода у директоријум у Линуку

Овај водич ће вам показати како да користите догађаје Линук система датотека (обавести) да бисте добили обавештење сваки пут када се датотека појави у директоријуму. Можете их користити као покретаче за аутоматизацију уобичајених задатака на вашем систему.

Написаћемо скрипту која надгледа директоријум и делује на нове датотеке које се додају. Свака датотека се гзипира и премешта у други директоријум чим се открије. Скрипта користи подсистем инотифи, преко услужног програма који се зове инотифи-тоолс. Али прво, хајде да инсталирамо алат и експериментишемо.

Инсталирање инотифи-алата и гзип-а

Користите апт-гет да инсталирате овај пакет на ваш систем ако користите Убунту или другу дистрибуцију засновану на Дебиан-у. У другим дистрибуцијама Линука, користите алатку за управљање пакетима ваше Линук дистрибуције.

sudo apt-get install inotify-tools gzip

Експериментисање са инотифи-алатима

Хајде да почнемо тако што ћемо гледати директоријум и видети који догађаји покрећу када стигну нове датотеке. Користићемо алат под називом инотифиватцх, који је део инотифи-тоолс. Направите нови директоријум под називом „долазни“:

mkdir incoming

Почните да гледате овај директоријум тако што ћете извршити следећу команду:

inotifywatch -v incoming

Ово ће упутити инотифи да прати све догађаје у систему датотека у директоријуму „долазни“. Опција -в омогућава да алат одштампа додатне информације о томе шта ради. Нисмо навели опцију временског ограничења (-т), а команда ће наставити да прикупља догађаје док не изађемо са ЦТРЛ+Ц. У овом тренутку, наш терминал би требао изгледати отприлике овако:

  Које су различите врсте руткита и како можете остати безбедни?

Отворите нови прозор терминала (или картицу) и пређите на долазни директоријум. Користите команду на додир да бисте креирали нову датотеку под називом „нова датотека“.

cd incoming/
touch newfile

Сада се вратите на први прозор терминала и зауставите инотифиватцх притиском на ЦТРЛ+Ц.

Табела догађаја ће бити сервирана на конзолу, указујући на једну инстанцу „цреате“, „опен“, „аттриб“ и „цлосе_врите“. Ова четири догађаја су се десила када смо користили додир да креирамо нову датотеку, подесили њене атрибуте приступа датотеци, отворили је да бисмо написали нулти завршни знак, а затим је затворили. Ово су само неки од мноштва догађаја који се могу пратити на систему датотека помоћу инотифи-алата. Можете видети комплетну листу на главној страници за инотифиватцх.

За наше потребе интересују нас само два догађаја:

„креирај“ – када је датотека креирана у циљном директоријуму.
„мовед_то“ – када се датотека премешта са друге локације у циљни директоријум.

Покушајмо поново инотифиватцх, али овог пута дајући му упутства да надгледа само ова два догађаја. Покрените ову наредбу у првом прозору терминала:

inotifywatch -v -e create -e moved_to incoming

У другом прозору или картици терминала, покушајмо да креирамо нову датотеку, променимо њен садржај, а затим преместимо датотеку са друге локације у циљни директоријум. Све ове команде се покрећу из матичног директоријума.

touch incoming/created
echo Testing123 >> incoming/created
touch /tmp/created2
mv /tmp/created2 incoming/

Вратите се на први прозор терминала и зауставите инотифиватцх притиском на ЦТРЛ+Ц. Видећемо следећи излаз:

Урачуната су само два догађаја: креирање датотеке под називом „цреатед.ткт“ и премештање постојеће датотеке под називом „цреатед2.ткт“. Све остало, као што је измена „цреатед.ткт“, је игнорисано.

  10 најбољих ГПУ платформи у облаку за АИ и велико радно оптерећење

Гледање именика и извршавање задатка

Сада када знамо које догађаје треба да пратимо, можемо да користимо другу алатку која се зове инотифиваит да блокирамо извршење док се датотека не креира или премести у наш циљни директоријум. Користићемо исте аргументе као и са инотифиватцх и такође навести како желимо да се форматира име датотеке за коришћење у нашем задатку.

Пре него што почнемо, потребан нам је директоријум за чување датотека које су већ обрађене. Направите директоријум под називом „обрађено“:

mkdir processed

Затим направите нову скрипту под називом „ватцх-инцоминг.сх“ и додајте садржаје наведене у наставку:

#!/bin/bash

TARGET=~/incoming/
PROCESSED=~/processed/

inotifywait -m -e create -e moved_to --format "%f" $TARGET 
        | while read FILENAME
                do
                        echo Detected $FILENAME, moving and zipping
                        mv "$TARGET/$FILENAME" "$PROCESSED/$FILENAME"
                        gzip "$PROCESSED/$FILENAME"
                done

Скрипта извршава команду инотифиваит са опцијом -м. Ово чини да се командни монитор мења на неодређено време. Сваки пут када се открије нови догађај, име датотеке се прослеђује команди за читање и убацује у променљиву „ФИЛЕНАМЕ“. Извршава се блок испод вхиле петље, у којем се датотека прво премешта у „обрађени“ директоријум, а затим се гзипира. Оригинална датотека се замењује компримованом датотеком, а име датотеке ће се завршавати на „.гз“.

Хајде да доделимо дозволе за извршавање овој скрипти и покренемо је из нашег матичног директоријума.

chmod u+x watch-incoming.sh
./watch-incoming.sh

Отворите други прозор терминала и креирајте нову датотеку у директоријуму „долазни“. Наведите садржај директоријума „долазни“ и „обрађени“ да бисте видели резултате откривеног догађаја:

Скрипта је открила необрађену текстуалну датотеку коју смо копирали у „долазни“ директоријум, копирала у „обрађену“ и затим компримовала помоћу гзип-а.

  Како да извезете Оутлоок календар као ЦСВ датотеку

Сада можемо да урадимо неке занимљиве задатке када можемо да пратимо нове датотеке које стижу у директоријум. На пример, могли бисмо да додамо водени жиг у сликовне датотеке, компресујемо необрађене видео записе у мп4 формат и чак да отпремимо сваку нову датотеку коју видимо у Амазон С3 корпу. Ова скрипта је добра полазна тачка за покретање сопствених токова посла и аутоматизацију уобичајених задатака на вашем систему.