【问题标题】:Single-line Linux command to list symlinks, targets and target dates?列出符号链接、目标和目标日期的单行 Linux 命令?
【发布时间】:2014-01-21 20:59:52
【问题描述】:

有没有一种方法可以在包含目标日期、符号链接名称和目标名称的目录中生成符号链接列表,并由指定的分隔符分隔?

其中任何一个都只给了我目标日期和链接名称:

find -L /path/to/dir/* -printf "%TY%Tm%Td%TH%TM%TS|%p\n"

ls -lH /path/to/dir/*

这...

find /path/to/dir/* -printf "%TY%Tm%Td%TH%TM%TS|%p|%l\n"

...我得到 link 日期、链接名称和目标名称。 %l 如果我包含 `-L' 参数,则不会返回任何内容,我猜是因为我猜它在跟随链接时会丢失它的引用。

如何从一行命令中获取链接日期链接名称目标名称

【问题讨论】:

    标签: linux file command find symlink


    【解决方案1】:

    您可以使用find-exec 开关对结果执行另一个命令(如stat),从而可以获取目标文件的属性。

    例子:

    find /path/to/dir/* -printf "%T@|%p|%l" -exec stat -Lc "|%Y.0000000000" {} \;

    这应该输出如下内容:

    Link Date|Link Name|Target Name|Target Date

    您可能希望使用日期格式字符串来使日期更易于阅读。

    【讨论】:

    • 谢谢,这与我正在寻找的非常接近。我只是不确定我还能调用什么其他命令。
    【解决方案2】:

    这是我使用的最后一个命令,主要感谢 rc0r

    find /path/to/files/* -printf "%TY%Tm%Td%TH%TM%TS|%p|%l" -exec stat -Lc "|%y" {} \; | sed -r "s/(.*\|)([0-9]{4})\-([0-9]{2})\-([0-9]{2}) ([0-9]{2})\:([0-9]{2})\:([0-9]{2}\.[0-9]{9}).*/\1\2\3\4\5\6\7/g"

    r0cr 的命令增强:

    1. 格式化 find -printf 以提供人类可读的时间戳,而不是 Unix 时间戳
    2. stat 中使用%y 而不是%Y 来提供人类可读的时间戳而不是Unix 时间戳
    3. 管道sedstat 的人类可读时间戳输出中去除无关字符

    这给了我:

    SymlinkDate|SymlinkPath|TargetPath|TargetDate

    日期采用人类可读格式:YYYYMMDDHHMMSS.mmmmmmmmm

    我不认为拥有sed 所有这些反向引用是从目标日期中剥离字符的最有效方法,但我想不出任何其他正则表达式来仅提取 [0-9\.] .对于这个特定的实现,效率并不是非常重要。

    谢谢!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-14
      • 2012-04-28
      • 2010-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-06
      • 1970-01-01
      相关资源
      最近更新 更多