Ksh 命令查找在上一小时内修改的文件



你能告诉我最有效的命令吗,它可以用来查找上一小时内(更准确地说是持续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}

最新更新