如何找到当前目录中的所有软链接(符号链接)?

如何找到当前目录中的所有软链接(符号链接)?

问题与 中的 shell 脚本有关bash

如何使用脚本检查哪些文件当前目录内有软链接吗?

以防我用错了词,当我说软链接,我指的是使用创建的文件ln -s

我唯一能想到的就是将其ls -la作为表达式进行评估,然后解析其结果,但这显然不是最好的解决方案。

答案1

'条件表达式'man bash在这种情况下,你想要-h

for file in *
do
  if [ -h "$file" ]; then
    echo "$file"
  fi
done

答案2

你可能真的不需要脚本。要仅显示当前文件夹中的任何符号链接,而不递归到任何子文件夹:

查找 . -maxdepth 1 -type l -print

或者,要获取更多信息,请使用以下方式之一:

查找 . -maxdepth 1 -type l -exec ls -ld {} +
查找 . -maxdepth 1 -type l -print0 | xargs -0 ls -ld

告诉如果如果文件是符号链接,则可以使用readlink,如果它不是符号链接,则不会输出任何内容。以下示例不是很有用,但显示了如何readlink忽略普通文件和文件夹。使用以下之一:

查找 . -maxdepth 1 -exec readlink {} +
查找 . -maxdepth 1 -print0 | xargs -0 readlink

请注意,上面的-exec ... +xargs ...比快得多-exec ... \;。例如:

时间查找 /usr/bin -maxdepth 1 -type l -exec ls -ld {} \;
实际 0分0.372秒
用户 0分0.087秒
系统 0分0.163秒

时间查找 /usr/bin -maxdepth 1 -type l -exec ls -ld {} +
实际 0分0.013秒
用户 0分0.004秒
系统 0分0.008秒

时间查找 /usr/bin -maxdepth 1 -type l -print0 | xargs -0 ls -ld
实际 0分0.012秒
用户 0分0.004秒
系统 0分0.009秒

相关内容