如何知道文件夹是否是符号链接?

如何知道文件夹是否是符号链接?

我正在寻找一种方法(如果存在)来知道文件夹的路径是符号链接还是文件夹的原始路径。

有这样的事吗?

答案1

要确定文件夹是否是符号链接,您可以使用以下任一方法。

  • GUI 方法

    文件夹图标会有所不同。文件夹图标会有一个箭头。

    图标区别

  • CLI 方法

    输出ls -l将清楚地表明该文件夹是一个符号链接,并且还将列出它指向的文件夹。

    $ ls -l
    total 4
    drwxr-xr-x 2 t domain users 4096 mai  24 15:56 original
    lrwxrwxrwx 1 t domain users    8 mai  24 15:56 symbolic -> original
    

    symbolic是指向文件夹的符号链接original

    开始代表llrwxrwxrwx符号链接,同时d代表文件夹目录),-代表文件

答案2

如果你想通过编程检查给定的目的是一个普通目录或指向目录的符号链接,您可以使用test命令。请注意,它返回是目录对于目录和目录的符号链接,但只返回是符号链接用于符号链接。因此:

#!/usr/bin/env bash

mkdir i_am_a_directory
ln -s i_am_a_directory i_am_a_symlink_to_a_directory

for object in i_am_a_directory i_am_a_symlink_to_a_directory; do
    if test -d $object; then
        if test -L $object; then
            echo "$object is a symlink to a directory"
        else
            echo "$object is just a plain directory"
        fi
    else
        echo "$object is not a directory (nor a link to one)"
    fi
done

结果:

i_am_a_directory is just a plain directory
i_am_a_symlink_to_a_directory is a symlink to a directory

答案3

替代方法:

1、使用file

file /usr/lib/jvm/jre-9
/usr/lib/jvm/jre-9: symbolic link to /etc/alternatives/jre_9

2、使用readlink

readlink -f /usr/lib/jvm/jre-9
/usr/lib/jvm/java-9-openjdk-9.0.4.11-6.fc28.x86_64

在这里你可以看到路径被扩展为链接目标

答案4

namei将分解路径中的每个组件,无论该路径是否通向目录。

例如,我的~/Playlists是的符号链接Documents/Playlists,并且Documents它本身也是的符号链接Dropbox/Documents

$ namei Playlists
f: Playlists
 l Playlists -> Documents/Playlists
   l Documents -> Dropbox/Documents
     d Dropbox
     d Documents
   d Playlists

在此输出中,

  • f:方法当前正在解析的路径名
  • l方法符号链接
  • d方法目录(文件夹)
  • 每个缩进级别代表一个符号链接级别

相关内容