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

Если это обходное решение не работает, попробуйте это в строке Exec= при редактировании /etc/xdg/autostart/empathy.desktop (или /usr/share/applications/empathy.desktop):

sh -c 'empathy & sleep 5 && xdotool search --sync --onlyvisible --class "empathy" windowunmap'

Это похоже, но не одно и то же: [ ! d2] Он пытается добавить пятисекундную паузу между запуском Empathy и отправкой имитируемого ввода в нее с помощью xdotool. Он также использует только действие windowunmap, а не предыдущее действие windowmove, которое менее важно.

1
задан 13 February 2015 в 16:12

3 ответа

Есть много способов увидеть это. Прежде всего, это указано в выводе 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 May 2018 в 23:17
  • 1
    waoow есть действительно много способов! Спасибо, что поделился – mateen 13 February 2015 в 17:16

Прочитайте 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 May 2018 в 23:17
  • 1
    Это не работает. if [ -d $theDir ] возвращает true, если целью ссылки является каталог. – terdon♦ 13 February 2015 в 16:23
  • 2
    @terdon Я исправил это. – waltinator 17 February 2015 в 08:14

использовать ls -F.

это приведет к тому, что ls добавит символы к именам файлов

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

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

@ для символических ссылок **

| для FIFO

> для дверей (что бы это ни значило)

= ] для сокетов

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

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

Вы также можете использовать stat и file для различения dirs / symlinks, например:

$ 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 May 2018 в 23:17

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

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