您能否告诉我最有效的命令,该命令可用于查找最近一小时(更准确地说是过去 60 分钟)在目录中修改的文件。
或者
如果它不是好方法,那么请告诉我如何将当前时间与文件创建/修改的时间戳进行比较
谢谢
这将适用于大多数现代 POSIX 兼容系统,使用 ksh[nn] 或 bash。
filetime=$(perl -e'
use POSIX qw(strftime);
$now_string = strftime "%Y%m%d%H%M.%S", localtime(time - 3601);
print $now_string, "\n";' )
touch -t $filetime /tmp/dummy # here for verification
ls -l /tmp/dummy
find . -newer /tmp/dummy -exec ls -l {} \;
该ls - l
命令用于向您显示“虚拟”,在您检查 touch 命令的作用后将其删除。
触摸一个时间戳为一小时的文件,然后使用 find 的选项 -newer。可以使用时区技巧(例如 GMT)计算接触时间:
echo "$(TZ=GMT+1 date +%Y-%m-%d)"
所以你做类似的事情
HOUROLDFILE=/tmp/hourold.tmp
touch -t "$(TZ=GMT+1 date '+%y%m%d%H%M')" ${HOUROLDFILE}
find a_directory -newer ${HOUROLDFILE}
rm ${HOUROLDFILE}
使用 find 的选项-newermt
:
find -newermt 'now -1 hour'
或者干脆
find -newermt -1hour
在 find 的手册中阅读更多关于使用的信息。
ksh的另一种方式:
BEFORE=$(date -d '-1 hour' '+%s'); find -type f -printf '%T@ %p\n' | while read -r TS FILE; do TS=${TS%.*}; [[ TS -ge BEFORE ]] && echo "$FILE"; done
不使用-d
:
BEFORE=$(( $(date '+%s') - 3600 )); find -type f -printf '%T@ %p\n' | while read -r TS FILE; do TS=${TS%.*}; [[ TS -ge BEFORE ]] && echo "$FILE"; done