用于列出符号链接,目标和目标日期的单行Linux命令?

时间:2014-01-04 03:13:45

标签: linux file command find symlink

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

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

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"

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

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

2 个答案:

答案 0 :(得分:2)

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

示例:

stat

这应输出如下内容:

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

您可能想要使用日期格式字符串来使日期更具人性化。

答案 1 :(得分:1)

这是我正在使用的最终命令,主要归功于 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. %y中使用%Y代替stat来提供人类可读的时间戳,而不是Unix时间戳
  3. 管道sed通过stat
  4. 从人类可读的时间戳输出中删除无关字符

    这给了我:

    SymlinkDate|SymlinkPath|TargetPath|TargetDate

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

    我不认为sed所有那些反向引用是最有效的方法来剥离字符超出目标日期,但我无法弄清楚任何其他正则表达式只提取[0-9 \ ]。对于这种特定的实施,效率并不是非常重要。

    感谢 - 你!