检查当月创建的文件

检查当月创建的文件

我的目录中有一个文件,我必须检查该文件是否在当月创建。我正在尝试 shell 脚本中的解决方案。

例如:我的文件路径是data/tmp/docs/test.txt,我只想检查该文件test.txt是在当月创建的。

答案1

使用 GNUdate或,在使用 Linux 作为内核的系统上busybox date最常见的实现是:date

if [ "$(date -r file +%Y%m)" = "$(date +%Y%m)" ]; then
  echo "file was last modified this month"
fi

(请注意,对于符号链接,它会查看目标的 mtime)。

POSIXly,同样可以通过以下方式实现:

(
  export LC_ALL=C; unset -v IFS
  eval "$(date +'cur_month=%b cur_year=%Y')"
  ls -Lnd file | {
    read -r x x x x x month x year_or_time x &&
      case $month-$year_or_time in
        ("$cur_month-$cur_year" | "$cur_month"-*:*)
          echo "file was last modified this month"
      esac
  }
)

答案2

您可以使用find -ctimedate +%d(当月的天数)的组合来实现此目的。整个命令如下:

find data/tmp/docs/test.txt -ctime -`date +%d`

如果文件较新,则它将显示输出的天数,如果不是,则输出将为空。因此将其分配给变量并检查它是否为空

OUTPUT=$( find data/tmp/docs/test.txt -ctime -`date +%d` )
if [ -n "$OUTPUT" ] ; then echo "file created in current month" ; fi

更新:正如@StéphaneChazelas 在评论中提到的,-ctime 不是创建时间,而是状态更改时间(fe chmod 将更新该日期),但是 linux状态结构仅包含:

time_t    st_atime   time of last access
time_t    st_mtime   time of last data modification
time_t    st_ctime   time of last status change

所以恕我直言,如果文件在创建后没有状态更改,则 ctime 是最好的选择。

相关内容