簡體   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