我的目录中有一个文件,我必须检查该文件是否在当月创建。我正在尝试 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 -ctime
和date +%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 是最好的选择。