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

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

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

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

Так что именно ls --directory или же ls -d делать?

5 ответов

Решение
$ 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 */

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

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

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

Если имеет смысл запускать его с другими ключами, такими как -l,

ls -ld покажет разрешения текущего каталога.

pilot6@Pilot6:~$ ls -ld
drwxrwxr-x 1 pilot6 pilot6 2570 Mar  4 12:14 .

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

ls -ld /bin

pilot6@Pilot6:~$ ls -ld /bin
drwxr-xr-x 1 root root 2584 Feb 25 15:19 /bin

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

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

ls -d */

С помощью 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/

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

  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, тогда вы увидите все, что присутствует в текущем каталоге .,

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

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

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

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