shell - find recursively in directory linux
Cómo excluir esta carpeta/actual/punto de buscar "tipo d" (4)
find . -type d
se puede usar para encontrar todos los directorios debajo de algún punto de inicio. Pero también devuelve el directorio actual ( .
), Que puede no ser deseado. ¿Cómo puede ser excluido?
Bueno, una solución alternativa también (la solución no funcionaba para mí en git bash)
find * -type d
Puede que no sea muy eficiente, pero hace el trabajo, y es lo que necesitamos a veces.
No solo la profundidad de recursión de find
puede controlarse mediante el parámetro -maxdepth
, la profundidad también se puede limitar desde "top" usando el parámetro correspondiente -mindepth
. Entonces, lo que uno realmente necesita es:
find . -mindepth 1 -type d
Utilizo find ./* <...>
cuando no me importa ignorar los archivos de puntos de primer nivel (el *
glob no coincide con estos por defecto en bash - vea la opción ''dotglob'' en el buzón integrado de compras: 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
find . ! -path . -type d
Para este caso en particular ( .
), El golf es mejor que la solución mindepth
(24 frente a 26 caracteres), aunque es probable que sea un poco más difícil de escribir debido a !
.
Para excluir otros directorios, esto funcionará menos bien y requiere una variable para DRYness:
D="long_name"
find "$D" ! -path "$D" -type d
Mi árbol de decisión entre !
y -mindepth
:
- ¿guión? Usar para la portabilidad.
- sesión interactiva en GNU?
- excluir ? Lanza una moneda.
- excluir
long_name
? Use-mindepth
.