Uso de ls com o comando wc

0

O que o comando:

ls | wc -l

fazer? Eu sei

wc <filename>

fornece linhas, palavras e caracteres e

wc -l <filename> 

imprima a contagem de linhas. Mas como está sendo usado com ls não está claro. O que isso faz?

    
por gpuguy 04.02.2014 / 14:29

3 respostas

4

À primeira vista , ele conta o número de arquivos em um diretório ( ls lista arquivos, wc -l conta-os).

Mas espere . Tente isto:

> mkdir test
> touch test/magic$'\n'newlines
> ls test | wc -l
2

O resultado do padrão POSIX permite novas linhas em nomes de arquivos. Devido a esse e outros casos de borda, o método geral para contar o número de arquivos em um diretório é muito mais complicado .

Houve uma vez uma conversa sobre adicionar um --zero flag a ls para permitir que tais monstruosidades fossem divididas (o caractere nulo é ilegal em nomes de arquivos POSIX), mas nunca se materializou devido à resistência de o coreutils devs .

Fazer ls | wc -l provavelmente é seguro para uma verificação casual, mas não confie nela quando precisar de código compatível com os padrões.

    
por 04.02.2014 / 15:15
2

Existe um pipe | entre dois comandos. Ou seja, ls , que lista o conteúdo de um diretório e wc , que contará o número de linhas geradas pelo comando ls . (O pipe une a saída do primeiro comando à entrada do segundo e assim por diante).

Portanto, o resultado é o número de arquivos / diretórios encontrados neste diretório.

    
por 04.02.2014 / 14:36
0

ls lista os arquivos em um diretório, e o comando wc (também conhecido como contagem de palavras) retorna as ocorrências de linhas neste exemplo.

Esses comandos podem ter uma variedade de opções (o -l após wc é chamado de switch). Então você pode ter wc contando o número de palavras ou caracteres também.

Exemplo

$ mkdir tst
$ cd tst
$ touch {1..5}
$ ls | wc -l
5

$ ls |wc
      5       5      10

OBSERVAÇÃO: Então, aqui temos 5 "novas linhas", 5 palavras e 10 caracteres. Os 10 caracteres são o 1,2,3,4,5 e o correspondente \n (caractere de nova linha) que ocorre depois deles na saída.

excerto da página wc man:

Print newline, word, and byte counts for each FILE, and a total line if more than one FILE is specified. With no FILE, or when FILE is -, read standard input.

Portanto, em nossos exemplos acima, estamos usando a "entrada padrão de leitura", o que significa obter a entrada da saída do comando ls por meio do canal ( | ). É assim que no Unix você pode encadear comandos para fazer coisas complicadas com ferramentas de linha de comando muito "básicas".

    
por 04.02.2014 / 15:26

Tags