有没有办法可以在一个目录中生成一个符号链接列表,其中包含目标的日期,符号链接的名称和由指定分隔符分隔的目标名称?
其中任何一个都只给我目标日期和链接名称:
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
将不返回任何内容,我猜是因为我猜它在链接后面会丢失它的引用。
如何从一行命令中获取链接日期,链接名称和目标名称?
答案 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 命令的扩充:
find -printf
以提供人类可读的时间戳而不是Unix时间戳%y
中使用%Y
代替stat
来提供人类可读的时间戳,而不是Unix时间戳sed
通过stat
这给了我:
SymlinkDate|SymlinkPath|TargetPath|TargetDate
日期采用人类可读的格式:YYYYMMDDHHMMSS.mmmmmmmmm
我不认为sed
所有那些反向引用是最有效的方法来剥离字符超出目标日期,但我无法弄清楚任何其他正则表达式只提取[0-9 \ ]。对于这种特定的实施,效率并不是非常重要。
感谢 - 你!