Как узнать, является ли папка символической ссылкой?

Я ищу способ, если он существует, узнать, является ли путь к папке символической ссылкой или оригинальный путь к папке.

Есть ли такая вещь?

7
задан 24 May 2019 в 16:53

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: -

. Вы заметите, что мои ~ / vids - это символическая ссылка на мою директорию ~ / Videos /

.
0
ответ дан 24 May 2019 в 16:53

Чтобы определить, является ли папка символической ссылкой, вы можете использовать любой из этих методов.

  • Метод графического интерфейса :

    Значок папки будет другим. Значок папки будет иметь стрелку.

    icon difference

  • Метод CLI

    Вывод ls -l будет четко указывать что папка является символической ссылкой, и она также перечислит папку, на которую она указывает.

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

    Здесь symbolic - символическая ссылка, указывающая на папку original.

    Начальная l в lrwxrwxrwx представляет символическую ссылку , в то время как d представляет папку (каталог ), а - представляет файл .

0
ответ дан 24 May 2019 в 16:53

Альтернативный подход:

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

Здесь вы можете видеть, что путь расширен связать цель

0
ответ дан 24 May 2019 в 16:53

Если вы хотите программно проверить, является ли данный объект простым каталогом или символической ссылкой на каталог, вы можете использовать команду 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
0
ответ дан 24 May 2019 в 16:53

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

В этом выводе

    [ 1112] f: означает имя пути, которое в настоящее время разрешается
  • l означает символьную ссылку
  • d означает каталог [ 1111] (папка)
  • Каждый уровень отступа представляет уровень символических ссылок
0
ответ дан 24 May 2019 в 16:53

Перейдите в родительский каталог подозреваемой символической ссылки и выполните

ls -la

-a на случай, если ваш файл - . скрытый файл.

Затем он должен начинаться с l , если это ссылка:

(automl-meta-learning) miranda9~/automl-meta-learning/automl-proj/experiments $ ls -la ~
total 136
drwx------. 18 miranda9 miranda9  4096 May  2 15:55 .
drwxr-xr-x. 23 root     root         0 May  2 15:45 ..
drwxrwxr-x.  8 miranda9 miranda9  4096 May  2 12:17 automl-meta-learning
-rw-------.  1 miranda9 miranda9 49858 May  2 15:10 .bash_history
-rw-r--r--.  1 miranda9 miranda9    18 Aug 22  2019 .bash_logout
-rw-r--r--.  1 miranda9 miranda9   176 Aug 22  2019 .bash_profile
-rw-r--r--.  1 miranda9 miranda9  1132 May  2 12:49 .bashrc
drwxrwxr-x.  6 miranda9 miranda9    70 Jan 30 14:29 .cache
lrwxrwxrwx.  1 miranda9 miranda9    26 May  2 15:55 .conda -> /home/miranda9/miniconda3/

см. Последнюю:

lrwxrwxrwx.  1 miranda9 miranda9    26 May  2 15:55 .conda -> /home/miranda9/miniconda3/

начинается с l и даже показывает, куда он указывает.

1
ответ дан 2 May 2020 в 21:01

Другие вопросы по тегам:

Похожие вопросы: