你能告诉我最有效的命令吗,它可以用来查找上一小时内(更准确地说是持续60分钟)在目录中修改的文件。
或
如果不是好方法,请告诉我如何将当前时间与文件创建/修改的时间戳进行比较
谢谢
使用 find 的选项-newermt
:
find -newermt 'now -1 hour'
或者干脆
find -newermt -1hour
在查找手册中阅读有关用法的更多信息。
ksh 的另一种方式:
BEFORE=$(date -d '-1 hour' '+%s'); find -type f -printf '%T@ %pn' | while read -r TS FILE; do TS=${TS%.*}; [[ TS -ge BEFORE ]] && echo "$FILE"; done
不使用-d
:
BEFORE=$(( $(date '+%s') - 3600 )); find -type f -printf '%T@ %pn' | while read -r TS FILE; do TS=${TS%.*}; [[ TS -ge BEFORE ]] && echo "$FILE"; done
这将适用于大多数现代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
命令用于显示"虚拟",请在检查触摸命令的功能后将其删除。
触摸时间戳为一小时的文件,然后使用 find 的选项 -newer。触摸时间可以使用时区技巧计算(例如格林威治标准时间):
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}