如何在 Ubuntu 中找出文件夹和文件夹链接之间的区别?

如何在 Ubuntu 中找出文件夹和文件夹链接之间的区别?

之前,我使用以下命令创建了一些指向另一个文件夹的链接。

sudo ln -s path_name link_name 

这些链接看起来与文件夹相似。我无法区分文件夹和链接。有没有办法找出文件夹和指向另一个文件夹的链接之间的区别?

答案1

有很多方法可以看到这一点。首先,它在 的输出中显示出来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

您还可以使用file

$ file bar foo 
bar: directory 
foo: symbolic link to `bar' 

另一个选择是readlink按照符号链接到他们的目标:

$ readlink foo
bar

运行readlink bar将不会返回任何输出(失败,返回非 0 的退出代码),因此您可以执行以下操作:

readlink bar || echo "Not a link!"

或者

readlink foo && "Echo this is a link"

最后,您还可以使用find或 shell 本身来列出所有链接:

find . -type l

或者

for f in *; do [ -L "$f" ] && echo "$f is a link"; done

答案2

->您可以通过输出中的小箭头 ( ) 识别链接ls -l

在此处输入图片描述

或者通过 的输出中出现的颜色来区分ls,如 中所述这个答案test2是链接):

在此处输入图片描述

答案3

阅读man [(或man test)你会看到你可以做到:

for theDir in path_name link_name ; do  
    if [ -L $theDir ] ; then  
        echo "$theDir exists and is a symbolic link"   
    elif [ -d $theDir ] ; then  
        echo "$theDir exists and is a directory"  
    fi  
done

$theDir我改变了测试的顺序,因此仅当其不是链接时才会检查目录。

答案4

使用ls -F

这将使 ls 将字符附加到文件名

*对于可执行文件

/对于目录

@对于符号链接**

|对于 FIFO

>对于门(无论这意味着什么)

=用于插座

常规文件末尾没有分类器。因此,就您而言,您会在@每个符号链接名称的末尾以及/实际目录的末尾看到分类器。

但是如果您使用,ls -l您将看不到符号链接的分类器,而是会看到->之后的链接目标。

您还可以使用statfile来区分目录/符号链接,例如:

$ file a                                                                                                                                                                                     
a: directory

$ file b                                                                                                                                                                                      
b: symbolic link to a

$ stat a                                                                                                                                                                                  
  File: 'a'
  Size: 40          Blocks: 0          IO Block: 4096   directory
 [...]

$ stat b                                                                                                                                                                                    
  File: 'b' -> 'a'
  Size: 1           Blocks: 0          IO Block: 4096   symbolic link
  [...]

相关内容