Excluindo. e .. de resultados em encontrar e ls

6

Existe alguma maneira de impedir que find e ls -l listem . e .. em seus resultados? Eu nunca me importo em ver esse resultado na saída, e isso me impede de canalizar efetivamente sua saída para wc -l para contar as coisas com precisão.

Caso seja importante, estou trabalhando em zsh .

    
por Josh 08.10.2013 / 17:51

3 respostas

4

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 inclui . nem .. mesmo quando dotglob está habilitado (como com o qualificador% glob_de (D) )).

Para evitar uma mensagem de erro quando não houver arquivo, adicione o qualificador N globbing:

count *(ND)

Isso faz com que o glob se expanda em 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ê pode contar os caracteres / em vez dos novos:

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

Ou recursivamente, usando este truque:

find .//. ! -name . -prune -print | grep -c //
    
por 08.10.2013 / 18:44
7

Para ls , use -A em vez de -a .

de man ls :

   -A, --almost-all
          do not list implied . and ..
    
por 08.10.2013 / 18:03
3

Para obter find para 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
...
    
por 08.10.2013 / 18:32

Tags