Excluyendo . y … de los resultados en find y ls

¿Hay alguna forma de evitar que find y ls -l incluyan . y .. en sus resultados? Nunca me importa ver este resultado en la salida, y me impide conectar eficazmente su salida a wc -l para contar las cosas con precisión.

En caso de que importe, estoy trabajando en zsh .

Con zsh :

 count() echo $# count * # non-hidden files (all types) count *(D) # files (all types) count **/*(D) # files recursively (all types) count **/*(D/) # directories only (recursively) 

( zsh globs nunca incluye ni .. incluso cuando dotglob está habilitado (como con el calificador de globbing (D) )).

Para evitar un post de error cuando no hay un file, agregue el calificador N globbing:

 count *(ND) 

Eso hace que el globo se expanda a nada (sin argumento, no es un argumento vacío) si no hay coincidencia.

Tenga en count que dado que el carácter de nueva línea es un carácter tan válido como cualquier otro en un nombre de file, conectar la salida de ls o find a wc -l no es correcto.

POSIX, puedes contar los / caracteres en lugar de los de nueva línea:

 find . ! -name . -prune -print | grep -c / 

O recursivamente, usando este truco:

 find .//. ! -name . -prune -print | grep -c // 

Para ls , use -A lugar de -a .

del man ls :

  -A, --almost-all do not list implied . and .. 

Para get find para excluir los directorys de puntos, puede usar esto:

 $ find . ! -path . -type d 

Ejemplo

 $ find . ! -path . -type d | head -5 ./.vim_SO ./.vim_SO/bundle ./.vim_SO/bundle/vim-fugitive ./.vim_SO/bundle/vim-fugitive/plugin ./.vim_SO/bundle/vim-fugitive/doc ...