Как исключить эту/текущую/точную папку из поиска "тип d"
find . -type d
может использоваться для поиска всех каталогов ниже некоторой начальной точки. Но он также возвращает текущий каталог (.
), что может быть нежелательным. Как его можно исключить?
Ответы
Ответ 1
Решение POSIX 7:
find . ! -path . -type d
В этом конкретном случае (.
) гольф лучше, чем решение mindepth
(24 против 26 символов), хотя это, вероятно, немного сложнее напечатать из-за !
.
Чтобы исключить другие каталоги, это будет лучше для гольфа и потребует переменную для СУХОЙ:
D="long_name"
find "$D" ! -path "$D" -type d
Мое дерево решений между !
и -mindepth
:
- script? Используйте
!
для переносимости.
- интерактивная сессия по GNU?
- исключить
.
? Бросьте монету.
- исключить
long_name
? Используйте -mindepth
.
Ответ 2
Не только глубина рекурсии find
может управляться параметром -maxdepth
, глубина также может быть ограничена "сверху" с использованием соответствующего параметра -mindepth
. Итак, что действительно нужно:
find . -mindepth 1 -type d
Ответ 3
Я использую 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
Ответ 4
Ну, простой обходной путь (решение не работает для меня на git bash)
find * -type d
Возможно, он не очень эффективен, но выполняет свою работу, и это то, что нам иногда нужно.
[Редактировать]: как @AlexanderMills заявил, что он не будет отображать скрытые каталоги в корневом каталоге (например, ./.hidden
), но он покажет скрытые подкаталоги (например, ./folder/.hiddenSub
). [Протестировано с git bash на windows]