Existe alguma maneira de prevenir e find
listar ls -l
seus resultados? Nunca me importo em ver esse resultado na saída e isso me impede de canalizar efetivamente a saída para contar as coisas com precisão..
..
wc -l
Caso seja importante, estou trabalhando em zsh
.
Responder1
Para ls
, use -A
em vez de -a
.
de man ls
:
-A, --almost-all
do not list implied . and ..
Responder2
Com 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 incluem .
nem ..
mesmo quando dotglob
estão habilitados (como com o (D)
qualificador globbing)).
Para evitar uma mensagem de erro quando não houver nenhum arquivo, adicione o N
qualificador globbing:
count *(ND)
Isso faz com que o globo se expanda para nada (nenhum argumento, não um argumento vazio) se não houver correspondência.
Observe que, como o caractere de nova linha é um caractere tão válido quanto qualquer outro em um nome de arquivo, canalizar a saída de ls
ou find
para wc -l
não está correto.
POSIXly, você poderia contar os /
caracteres em vez dos de nova linha:
find . ! -name . -prune -print | grep -c /
Ou recursivamente, usando este truque:
find .//. ! -name . -prune -print | grep -c //
Responder3
Para find
excluir os diretórios de pontos, você pode usar isto:
$ find . ! -path . -type d
Exemplo
$ 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
...