如何通过符号链接过滤来获取文件列表(然后对该列表执行某些操作)目标名称,而不是符号链接名称?例如,从以下列表中,我只对前四个文件感兴趣(目标包含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
进行名称匹配,尽管您可以通过任何一种方式执行此操作。