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

时间:2013-09-07 09:39:51

标签: shell scripting solaris ksh

请告诉我最有效的命令,可用于查找过去一小时内(最近60分钟)目录中修改的文件。

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

谢谢

3 个答案:

答案 0 :(得分:0)

使用find的选项-newermt

find -newermt 'now -1 hour'

或者只是

find -newermt -1hour

详细了解find manual中的用法。

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

答案 1 :(得分: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命令显示“虚拟”,在检查触摸命令的作用后将其删除。

答案 2 :(得分:0)

触摸时间戳为1小时的文件,然后使用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}