linux 如何检查目录中的任何文件是否已更改

w3nuxt5m  于 2022-12-11  发布在  Linux
关注(0)|答案(2)|浏览(502)

给定一个目录,我想知道目录中的文件是否被修改过。(布尔值)即,目录的状态是否与之前相比发生了变化。
我不想为此运行文件监视器服务,因为我不需要知道哪个文件被修改了(或者如果许多文件更改会收到许多事件)
我已经从stat中查看了atimemtimectime
例如:对于名为taskmaster的目录,该目录已包含sample.txt

stat taskmaster

输出功率

File: taskmaster
  Size: 245760      Blocks: 480        IO Block: 4096   directory
Device: 802h/2050d  Inode: 1309314     Links: 1
Access: (0777/drwxrwxrwx)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-05-22 21:25:06.226421200 +0530
Modify: 2020-05-22 21:25:06.222175900 +0530
Change: 2020-05-22 21:25:06.222175900 +0530
 Birth: -

修改文件夹内容后

# modify an existing file
echo modify > taskmaster/sample.txt

stat taskmaster给出

File: taskmaster
  Size: 245760      Blocks: 480        IO Block: 4096   directory
Device: 802h/2050d  Inode: 1309314     Links: 1
Access: (0777/drwxrwxrwx)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-05-22 21:25:06.226421200 +0530
Modify: 2020-05-22 21:25:06.222175900 +0530
Change: 2020-05-22 21:25:06.222175900 +0530
 Birth: -

完全相同的输出。
如果没有文件被移除或删除,访问和修改时间不会改变。我该如何实现这一点?

bd1hkmkf

bd1hkmkf1#

我认为您需要对单个文件执行stat操作,如下所示:

previous="$(stat *)"

while sleep 60; do
    current="$(stat *)"
    if  [[ $current != $previous ]]; then
        echo "Some files changed."
    fi
    previous=$current
done
wwtsj6pe

wwtsj6pe2#

早先的评论:stat -c %Y /path/to/directory也可以工作,确实有一个ceveat。有几个字段是stat命令读取和访问的,这取决于目录的内容是如何修改的。
stat命令输出使用st_mtime

printf("Last file modification:   %s", ctime(&sb.st_mtime));

来源:https://www.pdl.cmu.edu/posix/docs/POSIX-stat-manpages.pdf
Stat文档一个文件的st_mtime字段会随着文件修改而改变,例如mknod(2),truncate(2),utime(2)和write(2)(大于零字节)。
目录的st_mtime会因建立或删除该目录中的档案而变更。拥有者、群组、硬式链接计数或模式的变更不会变更st_mtime字段。
来源:http://man.he.net/man2/stat
因此,如果在目录中创建、写入或删除文件,则目录修改时间将自动更新,但如果在该目录中更改了其他硬链接或文件权限,则不会自动更新。
我找不到关于cascading的信息,但是目录utime应该向上传播,但是可能不会立即传播。我会为你的用例测试一下。

相关问题