我想检查一个目录中所有文件的修改时间。如果任何文件的时间与当前系统时间不同,则将打印RED。否则,打印绿色。
ls -lrt| grep main | awk '{if ($8 != `date +%R` ) print "-->RED"}END{print"-->GREEN"}'
您可以建议我如何纠正上述陈述。百万谢谢。
答案 0 :(得分:2)
Don't parse the output of ls
。您可以使用stat
执行所需操作。
stat -c%Y file
将以秒为单位输出文件的修改时间。date +%s
将输出自1970年1月1日以来以秒为单位的当前时间。
所以,你想要的是:
if [[ $(stat -c%Y main) -ne $(date +%s) ]]
then
echo "RED"
else
echo "GREEN"
fi
如果你想要上面的文件列表,并输出RED
,如果有任何不同的时间:
to_print=GREEN
for f in *main*
do
if [[ $(stat -c%Y "$f") -ne $(date +%s) ]]
then
to_print=RED
break
fi
done
echo $to_print
如果您不使用bash,则可以将[[
]]
对替换为[
和]
,将$(...)
替换为
`...`
答案 1 :(得分:1)
这是使用shell和date命令
执行此操作的一种方法#!/bin/bash
current=$(date +%R)
for file in *main*
do
d=$(date +%R -r "$file")
if [ "$d" = "$current" ];then
echo "GREEN: $file, current:$current, d: $d"
else
echo "RED: $file, current: $current, d: $d"
fi
done
请注意,您必须根据自己的需要进行调整,因为您可能只想比较日期,或仅限时间等等。无论是什么,请查看各种日期格式的日期手册页。
如果你想用awk做这个,这是一个纯awk(+ GNU日期)解决方案
awk 'BEGIN{
cmd="date +%R"
cmd|getline current
close(cmd)
for(i=1;i<=ARGC;i++){
file=ARGV[i]
if(file!=""){
cmd="date +%R -r \047"file"\047"
cmd |getline filetime
close(cmd)
if( filetime==current){
print "GREEN: "file
}else{
print "RED: "file
}
}
}
}
' *