繁体   English   中英

将 Unix 时间戳转换为人类可读的时间戳

[英]Convert Unix timestamp in human readable

我有以下脚本

size=$1

big_files_list=$(find . -name \*.bytes -type f -printf "%b %h/%f\n" |

                awk -v size="$size" '

                                function basename(file) {

                                                sub(".bytes$", ".properties", file)

                                                return file

                                                }

                                {if ($1 > size) {

                                                print basename($2) }}')

for i in ${big_files_list}; do
                echo "\t"
                grep -E 'size|repo-name|creationTime|ob-name|sha' $i | tr "\n" ","

done

在 output 下面打印

size=992198
repo-name=testupload
creationTime=1603278566981
ob-name=cargotracker-master.zip
sha1=ca8bb4e3ddb802a228e945a8fe32c308b2e3d555
size=992198
repo-name=testupload
creationTime=1603278566981
ob-name=cargotracker-master.zip
sha1=ca8bb4e3ddb802a228e945a8fe32c308b2e3d555
size=992198
repo-name=testupload
creationTime=1603278566981
ob-name=cargotracker-master.zip
sha1=ca8bb4e3ddb802a228e945a8fe32c308b2e3d555
size=992198
repo-name=testupload
creationTime=1603278566981
ob-name=cargotracker-master.zip
sha1=ca8bb4e3ddb802a228e945a8fe32c308b2e3d555

其中 grep 并从创建时间在 unix 时间戳的文件中打印日期我知道我们可以使用 date -d @1603278566981 将其转换为可读但记录有很多数字,

任何方式我们都可以在最终 output 之前转换它。 所以最终的 output 应该如下所示

size=992198
repo-name=testupload
creationTime=Sun Nov 16 22:29:41 CET 52775
ob-name=cargotracker-master.zip
sha1=ca8bb4e3ddb802a228e945a8fe32c308b2e3d555
size=992198
repo-name=testupload
creationTime=Sun Nov 16 22:29:41 CET 52775
ob-name=cargotracker-master.zip
sha1=ca8bb4e3ddb802a228e945a8fe32c308b2e3d555
size=992198
repo-name=testupload
creationTime=Sun Nov 16 22:29:41 CET 52775
ob-name=cargotracker-master.zip
sha1=ca8bb4e3ddb802a228e945a8fe32c308b2e3d555
size=992198
repo-name=testupload
creationTime=Sun Nov 16 22:29:41 CET 52775
ob-name=cargotracker-master.zip
sha1=ca8bb4e3ddb802a228e945a8fe32c308b2e3d555

请帮忙,

武士


编辑:这是上面的代码更好地格式化为可读性:

size=$1

big_files_list=$(
    find . -name \*.bytes -type f -printf "%b %h/%f\n" |
    awk -v size="$size" '
        function basename(file) {
            sub(".bytes$", ".properties", file)
            return file
        }
        {
            if ($1 > size) {
                print basename($2)
            }
        }
    '
)

for i in ${big_files_list}; do
    echo "\t"
    grep -E 'size|repo-name|creationTime|ob-name|sha' $i | tr "\n" ","
done

下面使用 GNU awk 怎么样:

awk '/size|repo-name|creationTime|ob-name|sha/ {
                 print
     }
     /creationTime/ {
                 split($0,map,"-");
                 dat=(map[2]/10000000)-11644473600;
                 print "creationTime="strftime("%c",dat)
     } $(find <fulldirectorypath> -name "*.bytes" -size="+$size" -type f -printf "%h/%f\n" | awk '{ split($0,map,".");print map[1]".properties" }')

首先,让 find 使用 -size 参数和 pipe output 到 awk 进行大小处理,将扩展从字节更改为属性。 然后用 awk 处理这些文件。 对于除 creationTime 之外的所有条目,只需打印行。 对于创建时间,处理 unix 时间戳并以区域设置形式打印。

这尚未经过测试,因此可能存在错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM