使用 find 查找两次/小时之间的文件

使用 find 查找两次/小时之间的文件

我将为我的问题写一些背景信息。

我必须处理一个每天运行的进程,该进程通过三个连续步骤创建文件:A、B 和 C。步骤 A 和 C 中的文件存储在一个文件夹 (X) 中,而步骤 B 中的文件存储在不同的文件夹中 (是)。一旦过程完成,两个文件夹都会备份到不同的计算机(我无法控制这一点)。文件夹X的内容如下:

t_11254an_luvo251n_B.bak    # A 'last modified at Feb  8 20:00'
t_11254aw_n7uo455w_B.bak    # C 'last modified at Feb  8 20:24'
t_11254av_j5ux8n2s_B.bak    # C 'last modified at Feb  8 20:25'
t_11254as_lvuo4e1j_B.bak    # A 'last modified at Feb  9 19:12'
t_11254at_m0uo4525_B.bak    # A 'last modified at Feb  9 19:12'
t_11254ak_m2uo4e1j_B.bak    # A 'last modified at Feb  9 19:12'
t_11254am_m1uo4e1j_B.bak    # A 'last modified at Feb  9 19:12'
t_11254am_m4uo4e4e_B.bak    # A 'last modified at Feb  9 19:13'
t_11254am_nauo4nhj_B.bak    # C 'last modified at Feb  9 21:54'
t_11254ai_n9uo4njs_B.bak    # C 'last modified at Feb  9 21:54'
t_11254ah_n7uo4nvw_B.bak    # C 'last modified at Feb  9 21:54'
t_11254aj_n8uo4njs_B.bak    # C 'last modified at Feb  9 21:54'
t_11254ak_ncuo71pv_B.bak    # A 'last modified at Feb 10 19:01'
t_11254ak_nduo7148_B.bak    # A 'last modified at Feb 10 19:01'
t_11254ay_nguo72t2_B.bak    # A 'last modified at Feb 10 19:03'
t_11254am_niuo71t5_B.bak    # A 'last modified at Feb 10 19:03'
t_11254av_onuo7991_B.bak    # C 'last modified at Feb 10 21:08'
t_11254at_omuo79tt_B.bak    # C 'last modified at Feb 10 21:08'
t_11254at_okuo7991_B.bak    # C 'last modified at Feb 10 21:08'

步骤 C 中的所有文件只有一件事是共同的:它们总是在 20:15 之后创建。它们的名称和大小都与步骤 A 中创建的文件不同。

我在进程开始删除文件夹 X 中的所有文件之前运行一个脚本,但我想保留在步骤 C 上创建的文件(全天)以加快恢复速度。我正在寻找的最终结果是这样的:

t_11254aw_n7uo455w_B.bak    # C 'last modified at Feb  8 20:24'
t_11254av_j5ux8n2s_B.bak    # C 'last modified at Feb  8 20:25'
t_11254am_nauo4nhj_B.bak    # C 'last modified at Feb  9 21:54'
t_11254ai_n9uo4njs_B.bak    # C 'last modified at Feb  9 21:54'
t_11254ah_n7uo4nvw_B.bak    # C 'last modified at Feb  9 21:54'
t_11254aj_n8uo4njs_B.bak    # C 'last modified at Feb  9 21:54'
t_11254av_onuo7991_B.bak    # C 'last modified at Feb 10 21:08'
t_11254at_omuo79tt_B.bak    # C 'last modified at Feb 10 21:08'
t_11254at_okuo7991_B.bak    # C 'last modified at Feb 10 21:08'

那么问题是:

  • 是否可以使用 find 查找两小时之间的文件,而不指定日期?

  • 如果没有,是否有一种简单的、单行的方法可以在 bash 中做到这一点?

谢谢。

答案1

感谢 Jetchisel 的回答,我已经找到了解决方案:

   #!/bin/bash

   for file in /folder/X/*.bak; do
     MODIFIED_DATE=$(stat --format="%y" $file | awk '{print $2}')

     if [[ $MODIFIED_DATE < '20:15' ]]; then
       printf 'rm -rf %s\n' "$file"
     fi
   done

stat --format="%y"以这种格式显示最后修改日期2020-02-02 19:11:34.000000000 +0100。我使用 awk 选择时间,这是我需要的信息,这样我就可以判断文件是否是在 20:15 之前创建的,从而删除它。这不是一句干净的话,但至少有效:)。

答案2

bash 的一种方式,文件位于20:00和之间22:00

#!/usr/bin/env bash

for f in /folder/x/*.bak; do
  var=$(date -r "$f" '+%H:%M')
  if [[ $var > '20:00' && $var < '22:00' ]]; then                                                                                                                                          
    echo "$f"
  fi
done
  • 上面的代码应该与您的文件匹配。
  • 只需更改为“[[ $var < '20:15' ]]如果这正是您所追求的”。
  • date语法适用于GNUBSD date(1)

编辑:更新答案

相关内容