Назад | Перейти на главную страницу

Какой простой способ перечислить ближайшие подкаталоги данного местоположения?

Есть ли встроенная команда или менее подробный способ достижения этого?

find /var/foo -maxdepth 1 -mindepth 1 -type d

Или мне просто сделать крошечный сценарий оболочки или функцию, если я часто делаю такие вещи?

ls -d */

«-d» означает не копаться в каталогах, «* /» соответствует только каталогам.

Самая короткая команда кажется

ls -d /var/foo/{*,.[^.]*,..[^.]*}/

Я считаю, что это нерекурсивно перечислит все подкаталоги /var/foo, независимо от того, насколько тупо названы каталоги или используются ли символы, отличные от ASCII.

user@comp:~$ ls -1d /var/foo/{*,.[^.]*,..[^.]*}/
/var/foo/ . . . . . /
/var/foo/-d/
/var/foo/. . . . . ./
/var/foo/. d/
/var/foo/.-d/
/var/foo/..d/
/var/foo/.d/
/var/foo/.字_Ж/
/var/foo/d/
/var/foo/dir1/
/var/foo/dir2/
/var/foo/字/

Тем не мение, find /var/foo -maxdepth 1 -mindepth 1 -type d легче запомнить и набрать.

Ниже приведен мой первоначальный ответ.

Если вас не интересуют файлы, начинающиеся с точки, тогда ответ mibus

ls -d /var/foo/*/

будет коротким и эффективным. Однако, если вы хотите, чтобы скрытые файлы были включены, нужно либо придерживаться

find /var/foo -maxdepth 1 -mindepth 1 -type d

или попробуйте

ls -FA /var/foo | grep /

-F помещает / и конец имен каталогов (а также другие символы для других типов файлов). Параметр -A включает файлы, начинающиеся с точки, за исключением "." и '..'. Вот почему -a не используется. Команда grep не получит ложных срабатываний, поскольку '/' не допускается в именах файлов (по крайней мере, для файловых систем POSIX).

Что касается производительности, на моей установке Ubuntu Jaunty с небольшим количеством файлов и каталогов в / var / foo всего 32k, find является самым быстрым, за ним следует ls -d, а ls -FA с grep идет последним.