0

您能否告诉我最有效的命令,该命令可用于查找最近一小时(更准确地说是过去 60 分钟)在目录中修改的文件。

或者

如果它不是好方法,那么请告诉我如何将当前时间与文件创建/修改的时间戳进行比较

谢谢

4

3 回答 3

0

这将适用于大多数现代 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 命令的作用后将其删除。

于 2013-09-08T15:45:30.373 回答
0

触摸一个时间戳为一小时的文件,然后使用 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}
于 2014-07-22T19:02:45.777 回答
0

使用 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
于 2013-09-07T10:06:01.730 回答