【问题标题】:find files modified within given time range查找在给定时间范围内修改的文件
【发布时间】:2020-06-22 16:09:12
【问题描述】:

大家好,我正在尝试创建一个脚本来搜索在 X:00-X:59 之间修改的文件。 X 由用户给出。我试过这个:

echo "Give hour: "
read N
if [ N>=0 && N<=24 ]
then
  find /home/mikepnrs -newermt "$N:00-59"
else
 echo "Out of bounds!"
fi

有什么解决办法吗?

【问题讨论】:

    标签: linux bash find


    【解决方案1】:

    -newermt primary 不接受任何格式的时间范围。要选择在假设A-B 期间修改的文件,您需要两个-newermts;一个包含比A 更新的文件,另一个排除比B 更新的文件。

    此外,还有两个边缘情况需要处理:

    1. 用户可以输入 08 或 09,因为两者都是有效时间。但由于两者都有前导零,Bash 会将它们视为算术上下文中的八进制数,并引发错误,因为 8 和 9 不是以 8 为基数的有效数字。
    2. 当用户输入 0 时,也包括在 00:00 修改的文件,包括 -newermt 的参数必须是昨天的 23:59:59。

    所以,我会这样做:

    #!/bin/bash -
    LC_COLLATE=C
    read -rp 'hour ([0]0-23): ' hour
    case $hour in
    (0|00)
      find /home/mikepnrs               \
          -newermt 'yesterday 23:59:59' \
        ! -newermt '00:59:59' ;;
    (0[1-9]|1[0-9]|2[0-3])
      find /home/mikepnrs                  \
          -newermt "$((10#$hour-1)):59:59" \
        ! -newermt "$hour:59:59" ;;
    (*)
      printf 'invalid hour: %q\n' "$hour" >&2
      exit 1
    esac
    

    【讨论】:

      【解决方案2】:

      它不是这样工作的:newerXY 为您提供比特定时间戳新的文件,您只能给出一个条件(并且您想要其中两个,“比 X:00 新”和“比“X+1:00”。

      我建议您使用 find 来查找“比 X:00 更新”的文件,并在查找的末尾使用 -ls,这会为您提供如下列表:

      37436171902531110  0 -rw-rw-rw-   1 user   group   0 May 24 15:56 ./blabla_002.jpg
       2533274791505920  0 -rw-rw-rw-   1 user   group  55 May 26 15:13 ./test.txt
      28147497671070312  0 -rw-rw-rw-   1 user   group   0 May 24 15:56 ./test_001.jpg
       8162774324885354  0 -rw-rw-rw-   1 user   group  25 Jun 17 10:22 ./try.txt
       2533274791505920  0 -rw-rw-rw-   1 user   group  55 May 26 15:13 test.txt
       8162774324885354  0 -rw-rw-rw-   1 user   group  25 Jun 17 10:22 try.txt
      

      使用awk脚本,可以过滤掉太新的。

      【讨论】:

        猜你喜欢
        • 2013-05-23
        • 1970-01-01
        • 1970-01-01
        • 2019-12-31
        • 2014-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多