recursively shell directory find

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


Solución POSIX 7 :

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 .