Есть ли встроенная команда или менее подробный способ достижения этого?
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 идет последним.