AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 451554
Accepted
xenoid
xenoid
Asked: 2018-06-25 00:16:58 +0800 CST2018-06-25 00:16:58 +0800 CST 2018-06-25 00:16:58 +0800 CST

`stat` 输出格式:截断日期字段

  • 772

在一种stat格式中(至少是我从 Linux 上的 bash 获得的格式),可以使用格式修饰符:例如,%010s将强制 size 字段至少为 10 个字符,用零填充到左侧(顺便说一句,这在某处有记录吗?)

是否有等效的技巧来限制字段的长度?我想以 %xyz 格式删除秒的小数部分。还是我必须使用 sed/awk 对输出进行后处理?

bash coreutils
  • 3 3 个回答
  • 7150 Views

3 个回答

  • Voted
  1. Kusalananda
    2018-06-25T00:57:14+08:002018-06-25T00:57:14+08:00

    使用 GNU 工具,

    date -r file +'%F %T %z'
    

    这将获得给定文件的最后修改时间戳(无亚秒级分辨率),并用于将其重新格式化为与将产生date的格式相同的格式。stat -c %y file

    例子:

    $ stat -c '%y' file
    2021-03-17 08:53:39.540802643 +0100
    
    $ date -r file +'%F %T %z'
    2021-03-17 08:53:39 +0100
    

    可以直接对格式规范使用printf-like 格式%y,但不能修改中间的一段字符串:

    $ stat -c '%.19y' file
    2021-03-17 08:53:39
    

    这会在 19 个字符后截断字符串,从而删除亚秒级数据,但时区信息也会被忽略。

    • 15
  2. Best Answer
    xenoid
    2018-06-25T03:01:54+08:002018-06-25T03:01:54+08:00

    好的,因为我可以指定一个类似 printf 的长度/填充(%010s例如),让我们回到原始的 printf 文档,该文档记录的精度实际上是字段的最大长度。和 tadaaa.... 它以stat格式工作!(此处截断以仅保留日期部分):

    stat -c '%.10y %10s %n' /boot/*
    2018-05-17    1501659 /boot/abi-4.13.0-43-generic
    2018-05-30    1501528 /boot/abi-4.13.0-45-generic
    2018-05-17     213220 /boot/config-4.13.0-43-generic
    2018-05-30     213220 /boot/config-4.13.0-45-generic
    1970-01-01       4096 /boot/efi
    2018-06-15       1024 /boot/grub
    2018-05-22   52211016 /boot/initrd.img-4.13.0-43-generic
    2018-06-22   52210415 /boot/initrd.img-4.13.0-45-generic
    2017-04-08      12288 /boot/lost+found
    2016-01-28     182704 /boot/memtest86+.bin
    2016-01-28     184380 /boot/memtest86+.elf
    2016-01-28     184840 /boot/memtest86+_multiboot.bin
    2018-05-17        255 /boot/retpoline-4.13.0-43-generic
    2018-05-30        255 /boot/retpoline-4.13.0-45-generic
    2018-05-17    3884045 /boot/System.map-4.13.0-43-generic
    2018-05-30    3883942 /boot/System.map-4.13.0-45-generic
    2018-05-17    7713296 /boot/vmlinuz-4.13.0-43-generic
    2018-05-22    7715224 /boot/vmlinuz-4.13.0-43-generic.efi.signed
    2018-05-30    7712560 /boot/vmlinuz-4.13.0-45-generic
    2018-06-14    7714488 /boot/vmlinuz-4.13.0-45-generic.efi.signed
    
    • 0
  3. Scott Stensland
    2021-08-24T12:10:25+08:002021-08-24T12:10:25+08:00

    这是一种从 stat 时间戳中提取部分然后生成自定义日期输出的便捷方法

    #!/bin/bash
    
    given_file=$1   #  supply file to get backed up with timestamp
    
    answer_interstital=$(stat -c '%.16y'  $given_file)  #   2021-08-23 15:09   stat given file extract out last changed timestamp using the -c flag
                                                        #   the   '%.16y'  specifies we want 16 character wide format of timestamp
    
    first_portion=$( echo $answer_interstital  | cut -c6-7,9-10)     #  0823
    second_portion=$(echo $answer_interstital  | cut -c12-13,15-16)  #  1509
    
    cool_lastchanged_timestamp="${first_portion}_${second_portion}"  #  print both of above portions separated with an underbar
    
    backup_filename=${given_file}~~${cool_lastchanged_timestamp}   #  create backup file using formatted timestamp
    
    cp -p $given_file  $backup_filename # backup file from    some_file   to    some_file~~0823_1509   
    
    • 0

相关问题

  • 通过命令的标准输出以编程方式导出环境变量[重复]

  • 从文本文件传递变量的奇怪问题

  • 虽然行读取保持转义空间?

  • `tee` 和 `bash` 进程替换顺序

  • 运行一个非常慢的脚本直到它成功

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    ssh 无法协商:“找不到匹配的密码”,正在拒绝 cbc

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    如何卸载内核模块“nvidia-drm”?

    • 13 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add 返回:“连接代理时出错:没有这样的文件或目录” 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve