【问题标题】:how to check if any of the files in a directory changed如何检查目录中的任何文件是否已更改
【发布时间】:2020-05-22 16:04:51
【问题描述】:

给定一个目录,我想知道目录中的文件是否被修改过。 (布尔值)即,如果目录的状态与以前相比发生了变化。

我不想为此运行文件监视服务,因为我不需要知道哪个文件已被修改(或者如果许多文件更改会收到许多事件)

我从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: -

完全相同的输出。

如果没有文件被删除或删除,访问和修改时间不会改变。我怎样才能做到这一点?

【问题讨论】:

    标签: linux file directory filesystems stat


    【解决方案1】:

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

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

    【讨论】:

    • 如果该文件夹中有数千个文件,这是否有效?不幸的是,这是我的用例(仅当由于我有很多文件而发生更改时才压缩目录)
    • @PhaniRithvij, stat * 10000 个文件需要 7 秒。
    • 好的,如果没有更好的解决方案,我会接受。
    • 如果我有一段时间没有收到更好的答案,我会接受你的答案。因为我打算这样做更有效率。
    猜你喜欢
    • 2015-06-07
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    • 2021-01-18
    • 2023-03-25
    • 2017-04-28
    相关资源
    最近更新 更多