¿Hay alguna forma de evitar find
que ls -l
aparezcan en la lista .
y ..
en sus resultados? Nunca me importa ver este resultado en la salida, y eso me impide canalizar efectivamente su salida para wc -l
contar las cosas con precisión.
Por si importa, estoy trabajando en zsh
.
Respuesta1
Para ls
, utilice -A
en lugar de -a
.
de man ls
:
-A, --almost-all
do not list implied . and ..
Respuesta2
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
los globos nunca se incluyen .
ni ..
siquiera cuando dotglob
están habilitados (como con el (D)
calificador globo)).
Para evitar un mensaje de error cuando no hay ningún archivo, agregue el N
calificador global:
count *(ND)
Eso hace que el globo se expanda hasta quedar en nada (sin argumento, no un argumento vacío) si no hay ninguna coincidencia.
Tenga en cuenta que, dado que el carácter de nueva línea es un carácter tan válido como cualquier otro en un nombre de archivo, canalizar la salida de ls
o find
hacia wc -l
no es correcto.
POSIXly, podrías 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 //
Respuesta3
Para find
excluir los directorios 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
...