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

Jos*_*din 14 symbolic-link

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

有这种事吗?

tat*_*tsu 18

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

  • 图形用户界面方法

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

    图标差异

  • 命令行方法

    的输出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
    
    Run Code Online (Sandbox Code Playgroud)

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

    开头llrwxrwxrwx代表符号链接,而d代表文件夹目录),-代表文件


gui*_*erc 6

方法很多,我常用的方法是用 stat

guiverc@ultracrap:~$   stat vids
  File: vids -> Videos/
  Size: 7               Blocks: 0          IO Block: 4096   symbolic link
Device: fd00h/64768d    Inode: 524725      Links: 1
Access: (0777/lrwxrwxrwx)  Uid: ( 1000/ guiverc)   Gid: ( 1001/ guiverc)
Access: 2019-05-25 00:16:26.708558789 +1000
Modify: 2019-05-25 00:16:26.708558789 +1000
Change: 2019-05-25 00:16:26.708558789 +1000
 Birth: -
Run Code Online (Sandbox Code Playgroud)

你会注意到我的 ~/vids 是我的 ~/Videos/ 目录的符号链接


rko*_*egi 5

替代方法:

1、使用 file

file /usr/lib/jvm/jre-9
/usr/lib/jvm/jre-9: symbolic link to /etc/alternatives/jre_9
Run Code Online (Sandbox Code Playgroud)

2、使用 readlink

readlink -f /usr/lib/jvm/jre-9
/usr/lib/jvm/java-9-openjdk-9.0.4.11-6.fc28.x86_64
Run Code Online (Sandbox Code Playgroud)

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


Per*_*uck 5

如果要以编程方式检查给定对象是普通目录还是指向目录的符号链接,可以使用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
Run Code Online (Sandbox Code Playgroud)

结果:

i_am_a_directory is just a plain directory
i_am_a_symlink_to_a_directory is a symlink to a directory
Run Code Online (Sandbox Code Playgroud)

  • `test` 也可以在命令行上使用,*eg*, `test -L foo && echo yes` 当且仅当它是一个符号链接时才会打印“yes”。 (2认同)