早些时候,我使用以下命令创建了一些指向另一个文件夹的链接。
sudo ln -s path_name link_name
Run Code Online (Sandbox Code Playgroud)
这些链接看起来类似于文件夹。我无法区分文件夹和链接。有没有办法找到一个文件夹和另一个文件夹的链接之间的区别?
有很多方法可以看到这一点。首先,它在 的输出中表示ls -l。请注意,目录d在权限字段的开头有一个,而链接有一个l:
$ ls -l
drwxr-xr-x 2 terdon terdon 4096 Feb 13 14:12 bar
lrwxrwxrwx 1 terdon terdon 3 Feb 13 14:12 foo -> bar
Run Code Online (Sandbox Code Playgroud)
您还可以使用file:
$ file bar foo
bar: directory
foo: symbolic link to `bar'
Run Code Online (Sandbox Code Playgroud)
另一种选择是readlink遵循指向其目标的符号链接:
$ readlink foo
bar
Run Code Online (Sandbox Code Playgroud)
运行readlink bar将不返回任何输出(失败,返回非 0 退出代码),因此您可以执行以下操作:
readlink bar || echo "Not a link!"
Run Code Online (Sandbox Code Playgroud)
或者
readlink foo && "Echo this is a link"
Run Code Online (Sandbox Code Playgroud)
最后,您还可以使用find或 shell 本身来列出所有链接:
find . -type l
Run Code Online (Sandbox Code Playgroud)
或者
for f in *; do [ -L "$f" ] && echo "$f is a link"; done
Run Code Online (Sandbox Code Playgroud)