Запустите скрипт для всех недавно измененных файлов в bash - PullRequest
0 голосов
/ 09 сентября 2018

Я бы хотел:

  1. Найти последний измененный файл в папке
  2. Изменить некоторые файлы в папке
  3. Найти все файлы, измененные после файла шага 1
  4. Запустите сценарий для этих файлов из шага 2

Это то, где я в конечном итоге:

#!/bin/bash
var=$(find /home -type f -exec stat \{} --printf="%y\n" \; |
     sort -n -r |
     head -n 1)
echo $var
sudo touch -d $var /home/foo
find /home/ -newer /home/foo

Кто-нибудь может мне помочь в достижении этих действий?

1 Ответ

0 голосов
/ 09 сентября 2018

Используйте inotifywait вместо того, чтобы отслеживать файлы и проверять наличие изменений

inotifywait -m -q -e modify --format "%f" {Path_To__Monitored_Directory}

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

 inotifywait -m -q -e modify --format "%f" -o {Output_File} {Path_To_Monitored_Directory}

пример вывода:

 file1
 file2

Пример

Мы контролируем каталог с именем /tmp/dir, который содержит file1 и file2. Следующий скрипт, который отслеживает весь каталог и отображает имя файла:

#!/bin/bash

while read ch
do
    echo "File modified= $ch"
done < <(inotifywait -m -q -e modify --format "%f" /tmp/dir)

Запустите этот скрипт и измените file1 echo "123" > /tmp/dir/file1, скрипт выведет следующее:

File modified= file1

Также вы можете посмотреть ответ stackoverflow

...