Что означает «ls -directory»?

16

В моей версии Ubuntu у man ls есть следующая информация о --directory:

list directory entries instead of contents, and do not dereference symbolic links

Итак, я немного запутался, как это работает. Я использовал команду ls --directory , и я ожидал список со всеми каталогами, но вместо этого я получил .

Итак, что именно делает ls --directory или ls -d ?     

задан Pau Chorro 04.03.2017 в 17:14
источник

5 ответов

24
$ man ls
...
-d, --directory
              list directories themselves, not their contents

Текущая директория представлена ​​как . , так что это список ls -d .

Каталоги внутри текущего каталога являются содержимым каталога и поэтому не отображаются с этой опцией.

Я использую параметр -d в псевдониме для отображения скрытых файлов и каталогов

alias l.='ls -dC .* --color'

Без -d , это также отобразит содержимое скрытых каталогов, чего я не хочу.

Другое использование для этого - это когда я хочу видеть метаданные каталога, используя параметр -l , а не его содержимое:

$ ls -ld playground
drwxr-xr-x 72 zanna zanna 12288 Mar  1 23:10 playground

Если вам нужен список каталогов в текущем каталоге, вы можете использовать

ls -d */
    
ответ дан Zanna 04.03.2017 в 17:20
источник
11

Использование ls только с -d почти бесполезно. Он дает информацию о самом каталоге. Он не перечисляет его содержимое.

Вот почему вы не видите список каталогов. Каталоги, которые вы ожидали увидеть, являются «содержимым» текущего каталога

Если вы просто запускаете ls -d , он показывает текущий каталог . .

Если имеет смысл запускать его с помощью других клавиш, например -l .

ls -ld будет показывать разрешения текущего каталога.

[email protected]:~$ ls -ld
drwxrwxr-x 1 pilot6 pilot6 2570 Mar  4 12:14 .

Вы также можете видеть разрешения любого другого каталога, например

ls -ld /bin

[email protected]:~$ ls -ld /bin
drwxr-xr-x 1 root root 2584 Feb 25 15:19 /bin

Если вы запустите ls -l без -d , у вас будет список всех разрешений для файлов и папок в текущем каталоге. Если вам это не нужно, это хороший пример использования ls -ld .

Вы можете перечислить каталоги в текущей версии

ls -d */
    
ответ дан Pilot6 04.03.2017 в 17:21
6

Использование ls -d само по себе довольно бесполезно, потому что без параметра он всегда возвращает . . После указания параметра это имеет смысл. Например, если ваше имя пользователя rick , и вы хотите увидеть все каталоги в своем доме:

$ ls -d /home/rick/*/
/home/rick/AAC/        /home/rick/EnhanceIO/         /home/rick/silentcast/
/home/rick/assembly/   /home/rick/EnhanceIO-master/  /home/rick/Templates/
/home/rick/bin/        /home/rick/log/               /home/rick/test/
/home/rick/Desktop/    /home/rick/Music/             /home/rick/tmpe/
/home/rick/Documents/  /home/rick/Pictures/          /home/rick/Videos/
/home/rick/Downloads/  /home/rick/Public/
    
ответ дан WinEunuuchs2Unix 04.03.2017 в 17:40
5

Позвольте мне объяснить с примерами:

  1. ls : содержимое списка каталогов

  2. ls -d или ls --directory : сами списки каталогов, а не их содержимое

Примеры:

ls -d android-sdk-linux/

# result
android-sdk-linux/

ls android-sdk-linux/

# result
add-ons  build-tools  platforms  platform-tools  SDK Readme.txt  temp  tools

Ваш случай ls -d говорит, что в списке показывается только каталог, в котором я не являюсь его содержимым (т. е. . в терминах Linux), поэтому результат: . .

Но если вы сказали: ls , то вы увидите все, что присутствует в текущем каталоге . .

    
ответ дан George Udosen 04.03.2017 в 17:20
4

ls -d перечисляет каталоги самостоятельно, а не их содержимое. Файлы указаны как обычно. Просмотрите описание man ls для описания всех параметров.

. - это каталог, который он сам, тот же, который вы используете при запуске команды из текущего каталога, ./runscript.sh

.. - родительский каталог, родительский для текущего directore, как в cd .. для перемещения с шагом в иерархии каталогов

    
ответ дан Soren A 04.03.2017 в 17:24