linux - 将 Unix 时间戳转换为人类可读的
问题描述
我有以下脚本
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
在输出下方打印
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 并从文件中打印日期,其中 creationTime 在 unix 时间戳中我知道我们可以使用 date -d @1603278566981 将其转换为可读但记录有很多数字,
我们可以在最终输出之前以任何方式转换它。所以最终输出应该如下所示
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 参数进行大小处理,并将输出通过管道传输到 awk 以将扩展从字节更改为属性。然后用 awk 处理这些文件。对于除 creationTime 之外的所有条目,只需打印行。对于创建时间,处理 unix 时间戳并以语言环境形式打印。
这尚未经过测试,因此可能存在错误。
推荐阅读
- reactjs - React - 连续输入的单独框
- javascript - 正/负模数以获取范围内的项目
- r - 比较两列中的值并在 R 或 awk 中重新编码
- python - 使用 feedparser 分别识别 itunes:keywords 和 itunes:category?
- android - getActivity 无法解决
- image - 生成从 SD 卡运行的 Ubuntu 映像
- javascript - 在 sessionStorage 中同时替换数据的最佳方法
- angular - 我想让 mat-icon 具有多行工具提示。我尝试了以下方式,但没有在工具提示中显示 \n
- machine-learning - 随机森林中预测值的特征重要性?
- sql - 如何在oracle DB中检查某个日期是否在当前日历月中