Как я могу найти различие между папкой и ссылкой папки в Ubuntu?

Ранее, я создал некоторые ссылки на другую папку с помощью следующей команды.

sudo ln -s path_name link_name 

Эти ссылки выглядят подобными папкам. Я не могу дифференцироваться между папкой и ссылкой. Существует ли способ найти различие между папкой и ссылкой на другую папку?

4
задан 13 February 2015 в 05:12

4 ответа

Вы могли распознать ссылку любым маленькая стрелка (->) в выводе ls -l:

enter image description here

или выдающимся цветом, также появляющимся в выводе ls, как описано в этот ответ (test2 ссылка):

enter image description here

5
ответ дан 23 November 2019 в 11:39

Существует много способов видеть это. В первую очередь, это обозначается в выводе 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 или сама оболочка для списка всех ссылок:

find . -type l

или

for f in *; do [ -L "$f" ] && echo "$f is a link"; done
6
ответ дан 23 November 2019 в 11:39

Читайте 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 не ссылка.

2
ответ дан 23 November 2019 в 11:39

используйте ls -F.

это заставит ls добавить символы к именам файлов

* для исполняемых файлов

/ для каталогов

@ для символьных ссылок **

| для FIFOs

> для дверей (независимо от того, что это означает)

= для сокетов

, регулярные файлы не имеют классификатора в конце. Таким образом в Вашем случае Вы будете видеть @ в конце каждого имени символьной ссылки и / в конце реального каталога.

Однако, если Вы используете ls -l, Вы не будете видеть классификаторы для символьных ссылок, и вместо этого Вы будете видеть -> и цель ссылки после этого.

можно также использовать stat и file для дифференциации директоров/символьных ссылок, например:

$ 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
  [...]
1
ответ дан 23 November 2019 в 11:39

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

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