find . -type d
может использоваться для поиска всех каталогов ниже некоторой начальной точки. Но он также возвращает текущий каталог (.
), что может быть нежелательным. Как его можно исключить?
find . -type d
может использоваться для поиска всех каталогов ниже некоторой начальной точки. Но он также возвращает текущий каталог (.
), что может быть нежелательным. Как его можно исключить?
find . ! -path . -type d
В этом конкретном случае (.
) гольф лучше, чем решение mindepth
(24 против 26 символов), хотя это, вероятно, немного сложнее напечатать из-за !
.
Чтобы исключить другие каталоги, это будет лучше для гольфа и потребует переменную для СУХОЙ:
D="long_name"
find "$D" ! -path "$D" -type d
Мое дерево решений между !
и -mindepth
:
!
для переносимости..
? Бросьте монету.long_name
? Используйте -mindepth
.Не только глубина рекурсии find
может управляться параметром -maxdepth
, глубина также может быть ограничена "сверху" с использованием соответствующего параметра -mindepth
. Итак, что действительно нужно:
find . -mindepth 1 -type d
Я использую find ./* <...>
, когда я не возражаю игнорировать доп файлы первого уровня (*
glob не соответствует этим по умолчанию в bash - см. параметр "dotglob" в встроенном магазине: https://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html).
eclipse tmp # find . . ./screen ./screen/.testfile2 ./.X11-unix ./.ICE-unix ./tmux-0 ./tmux-0/default
eclipse tmp # find ./* ./screen ./screen/.testfile2 ./tmux-0 ./tmux-0/default
Ну, простой обходной путь (решение не работает для меня на git bash)
find * -type d
Возможно, он не очень эффективен, но выполняет свою работу, и это то, что нам иногда нужно.
[Редактировать]: как @AlexanderMills заявил, что он не будет отображать скрытые каталоги в корневом каталоге (например, ./.hidden
), но он покажет скрытые подкаталоги (например, ./folder/.hiddenSub
). [Протестировано с git bash на windows]