В zsh вы можете квалифицировать глобусы с утверждениями типа файла, например, *(/) соответствует только каталогам, *(.) только нормальным файлам, есть ли способ сделать то же самое в bash, не прибегая к поиску?
*(/)
*(.)
вы можете попробовать
ls -ltrd */ #match directories using -d and the slash "/"
или
echo */
for dir in */ do ... done
Если вам нужно сделать это рекурсивно, и у вас есть Bash 4 +
$ shopt -s globstar $ for dir in **/*/; do echo $dir; done
Я не думаю, что есть способ сделать это напрямую, но не забывайте, что вы можете использовать test options -d и -f, чтобы определить, относится ли имя к каталогу или файл.
-d
-f
for a in *; do if [ -d "$a" ]; then echo Directory: $a elif [ -f "$a" ]; then echo File: $a fi done