Использование ls в Linux для показа только каталогов - PullRequest
1 голос
/ 27 марта 2019

Я знакомлюсь с Linux (Debian 9). Однако мне удалось запутаться в руководстве по команде ls. Я сделал следующие тривиальные настройки для тестирования:

meouser:~/triv_dir$ ls -laR
.:
total 24
drwxr-xr-x  4 meouser meouser 4096 Mar 27 15:42 .
drwxr-xr-x 19 meouser meouser 4096 Mar 27 15:41 ..
drwxr-xr-x  4 meouser meouser 4096 Mar 27 15:55 a
drwxr-xr-x  2 meouser meouser 4096 Mar 27 15:42 b
-rw-r--r--  1 meouser meouser    6 Mar 27 15:44 c
-rw-r--r--  1 meouser meouser    6 Mar 27 15:44 d

./a:
total 24
drwxr-xr-x 4 meouser meouser 4096 Mar 27 15:55 .
drwxr-xr-x 4 meouser meouser 4096 Mar 27 15:42 ..
-rw-r--r-- 1 meouser meouser    4 Mar 27 15:50 aa
-rw-r--r-- 1 meouser meouser    4 Mar 27 15:50 ab
drwxr-xr-x 2 meouser meouser 4096 Mar 27 15:55 a_sub_1
drwxr-xr-x 2 meouser meouser 4096 Mar 27 15:55 a_sub_2

./a/a_sub_1:
total 12
drwxr-xr-x 2 meouser meouser 4096 Mar 27 15:55 .
drwxr-xr-x 4 meouser meouser 4096 Mar 27 15:55 ..
-rw-r--r-- 1 meouser meouser    4 Mar 27 15:55 aaa

./a/a_sub_2:
total 8
drwxr-xr-x 2 meouser meouser 4096 Mar 27 15:55 .
drwxr-xr-x 4 meouser meouser 4096 Mar 27 15:55 ..

./b:
total 16
drwxr-xr-x 2 meouser meouser 4096 Mar 27 15:42 .
drwxr-xr-x 4 meouser meouser 4096 Mar 27 15:42 ..
-rw-r--r-- 1 meouser meouser    4 Mar 27 15:50 ba
-rw-r--r-- 1 meouser meouser    4 Mar 27 15:50 bb

Я хотел бы видеть все имена каталогов и их подкаталоги, но не имена файлов. То есть я хочу что-то вроде ls --insert-options-here, чтобы на выходе было это подмножество сверху:

.:
total 24
drwxr-xr-x  4 meouser meouser 4096 Mar 27 15:42 .
drwxr-xr-x 19 meouser meouser 4096 Mar 27 15:41 ..
drwxr-xr-x  4 meouser meouser 4096 Mar 27 15:55 a
drwxr-xr-x  2 meouser meouser 4096 Mar 27 15:42 b

./a:
total 24
drwxr-xr-x 4 meouser meouser 4096 Mar 27 15:55 .
drwxr-xr-x 4 meouser meouser 4096 Mar 27 15:42 ..
drwxr-xr-x 2 meouser meouser 4096 Mar 27 15:55 a_sub_1
drwxr-xr-x 2 meouser meouser 4096 Mar 27 15:55 a_sub_2

В соответствии с ls руководством, которое должно быть достигнуто ls -ldR.

meouser:~/triv_dir$ man ls

   -a, --all
          do not ignore entries starting with .

   -d, --directory
          list directories themselves, not their contents

   -l     use a long listing format

   -R, --recursive
          list subdirectories recursively

Но это то, что происходит вместо этого: отображается только '.'.

meouser:~/triv_dir$ ls -ldR
drwxr-xr-x 4 meouser meouser 4096 Mar 27 15:42 .

Чего мне не хватает в руководстве?

Я заметил из https://stackoverflow.com/a/29277454/11199684, что это может быть достигнуто find . -maxdepth 2 -type d -print что впечатляет, но дает меньше информации, чем вывод ls выше. Кроме того, я не могу знать заранее правильный maxdepth? И, прежде всего, для будущих нужд я на самом деле заинтересован в том, чтобы учить себя по учебникам. Советы приветствуются.

1 Ответ

2 голосов
/ 27 марта 2019

Параметр -d применяется к [FILE], указанному в качестве входных данных, в вашем случае, если ни один из них не задан, вы возвращаетесь к стандартному: текущему каталогу.Рекурсивность не применяется, так как каталог не возвращается.

Чтобы получить тот же вывод, что и ls с командой find, вы можете объединить их:

find . -type d -exec ls -ld {} \;
...