【问题标题】:How to get event of file created/copy in a folder in CentOS?如何在 CentOS 的文件夹中获取文件创建/复制的事件?
【发布时间】:2012-10-04 06:03:21
【问题描述】:

我需要在 CentOS 中编写一个脚本,它将在后台运行。 该脚本需要检查是否在 /root/MyFile 文件夹中创建了文件名“status.txt”。如果创建了该文件,我的脚本应该会捕获一个事件。

我应该在我的脚本中编写什么代码 sn-p,以便它获取已在文件夹中创建 txt 文件的事件?

非常感谢任何帮助。

【问题讨论】:

    标签: file shell event-handling centos


    【解决方案1】:

    最简单的解决方案:

    while true; do
    do
      [ -e "/root/MyFile/status.txt" ] && { echo file is created; break; }
      sleep 1
    done
    

    代替echo file is created,你可以编写你想要执行的命令。

    您可以使用 inotify 进行相同的操作:

    inotifywait --format '%f' -m /root/MyFile 2> /dev/null | while read file
    do
      [ "$file" = status.txt ] \
      && [ -e "/root/Myfile/$file" ] \
      && { echo file is created ; break; }
    done
    

    该解决方案的优势在于您将立即获得操作,因为文件将被创建。在第一种情况下,您也将等待第二种情况。第二个优势,您需要每秒轮询文件系统。

    但这种解决方案也有缺点:

    • 它仅适用于 Linux;
    • 您需要相对现代的内核;
    • 您需要安装inotify-tools;
    • 如果您在创建status.txt 之前创建了许多文件,则需要进行许多额外的比较操作。

    正在恢复:

    我认为,您需要第一个解决方案。

    【讨论】:

      【解决方案2】:

      如果您的内核比 2.6.13 更新,您可以使用inotify 机制来实现您的目标。安装包inotify-tools 并使用提供的examples 编写将监视您的文件的脚本

      【讨论】:

        猜你喜欢
        • 2016-01-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-22
        • 2021-11-22
        相关资源
        最近更新 更多