比较 awk 中的时间

发布于 2024-08-22 12:46:01 字数 213 浏览 4 评论 0原文

我想检查一个目录下所有文件的修改时间。如果任何文件的时间与当前系统时间不同,则会打印红色。否则,打印 GREEN。

ls -lrt| grep main | awk '{if ($8 != `date +%R` ) print "-->RED"}END{print"-->GREEN"}' 

您可以建议我如何纠正上述说法。万分感谢。

I want to check the modified time of all the files in one directory. If any file has the time different from the current system time, then RED will be printed. Otherwise , GREEN is printed.

ls -lrt| grep main | awk '{if ($8 != `date +%R` ) print "-->RED"}END{print"-->GREEN"}' 

May you suggest me how to correct the above statement. Million thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

你的呼吸 2024-08-29 12:46:01

不解析 ls 的输出。您可以使用 stat 执行您想要的操作。

stat -c%Y file 将输出自 1970 年 1 月 1 日以来文件的修改时间(以秒为单位)。 date +%s 将输出自 1 月 1 日以来的当前时间(以秒为单位) ,1970。

所以,你想要的可以通过以下方式完成:

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,那么你可以将 [[ ]] 对替换为 [],以及 $(...)与

`...`

Don't parse the output of ls. You can do what you want with stat.

stat -c%Y file will output the modification time of a file in seconds since Jan 1, 1970. date +%s will output the current time in seconds since Jan 1, 1970.

So, what you want can be done by:

if [[ $(stat -c%Y main) -ne $(date +%s) ]]
then
    echo "RED"
else
    echo "GREEN"
fi

If you want the above for a list of files, and output RED if any time is different:

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

If you're not using bash, then you can replace [[ ]] pair with [ and ], and $(...) with

`...`
ペ泪落弦音 2024-08-29 12:46:01

这是您可以使用 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 date) 解决方案

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
            }
        }
    }
}
' *

this is one way you can do it with shell and date command

#!/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

note that you will have to adjust to your own needs, since you may just want to compare date only, or time only, etc.. whatever it is, check the man page of date for various date formats.

If you want to do it with awk, here's a pure awk(+GNU date) solution

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
            }
        }
    }
}
' *
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文