在bash中所有最近修改的文件上运行脚本

时间:2018-09-09 12:27:57

标签: bash shell find touch stat

我想:

  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 :(得分:1)

使用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的目录,其中包含file1file2。 以下脚本监视整个目录并回显文件名:

#!/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 answer