问题与 中的 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秒