按符号链接目标列出文件

按符号链接目标列出文件

如何通过符号链接过滤来获取文件列表(然后对该列表执行某些操作)目标名称,而不是符号链接名称?例如,从以下列表中,我只对前四个文件感兴趣(目标包含bar):

foo ->  /tmp/bar
bar ->  /home/me/bartoo
baz ->  /home/me/public/barthree
zoo ->  /usr/share/bar
moo ->  /tmp/foo
roc ->  /tmp/roc

答案1

您可以使用 find 来获取符号链接类型的所有文件,并添加-ilname按链接目标名称进行搜索的选项。这就像-iname链接目标名称而不是链接名称一样工作。

find -type l -ilname "*bar*"

这仍然会打印出链接的名称,而不是目标。如果您想打印目标的名称,请尝试以下操作:

find -type l -ilname "*bar*" -printf "%l\n"

或者获得完整的ls样式输出

find -type l -ilname "*bar*" -ls

你的意思是“对列表做一些事情” 不清楚,但如果你想对链接文件进行操作,你可以使用参数-exec来查找:

find -type l -ilname "*bar*" -exec touch {} \;

但是如果您需要对链接目标进行操作,则需要使用-printf来获取目标值,然后xargs自己进行一些循环来操作。你可以这样做:

find -type l -printf "%l\n" | grep bar | xargs touch

...这还演示了如何使用grep而不是find -ilname进行名称匹配,尽管您可以通过任何一种方式执行此操作。

相关内容