contando no diretório

1

Gostaria de saber qual é a diferença entre:

$ ls | wc -l

e

$ ls > foo
$ wc -l < foo

ao contar todos os arquivos nas diretórios atuais. E por que o segundo me dá um arquivo a mais?

    
por MassU 29.11.2015 / 20:37

2 respostas

4

Não há diferença, na verdade. O segundo caso também inclui o arquivo foo na lista e, portanto, fornece uma contagem de mais 1.

    
por Doug Smythies 29.11.2015 / 20:42
0

O que você está fazendo com ls > foo está redirecionando a saída de ls para um arquivo. Surpreendentemente, o arquivo está sendo criado primeiro e incluído na saída de ls

   abcd:$ ls                                                                      
a?b  file name

abcd:$ ls > file                                                               

abcd:$ cat file
a
b
file
file name

Antes do redirecionamento, havia dois arquivos a\nb e file name . Após o redirecionamento: 3 arquivos, file incluídos. Este é o problema real no seu caso.

Mas você provavelmente notou outra coisa: por que o arquivo a\nb foi listado em duas linhas. Por quê ? ls pode listar arquivos, mas o shell permite quase qualquer tipo de caractere no nome do arquivo, incluindo a nova linha. Assim, quando a saída de ls é analisada, pode haver informações erradas. Para a contagem adequada de arquivos, que é o seu objetivo principal, você pode usar for loop com shell glob

abcd:$ for FILE in * ; do echo "1";done                                                                                               
1
1
1

Como você pode ver, mostra corretamente que eu tenho 3 arquivos (incluindo o file redirecionado de antes)

Para mais informações, consulte o link

    
por Sergiy Kolodyazhnyy 29.11.2015 / 22:05