O que ls -l | wc fazer

0

Não consigo descobrir o que esse comando faz. Ele produz 3 números no meu terminal, mas sem explicação do que esses números são. Eu entendo que ls -l lista todos os arquivos no formato de lista de registro e wc é a contagem de palavras, mas esses números parecem não corresponder a nada.

Alguma ajuda?

    
por xiimoss 19.10.2015 / 13:27

1 resposta

11

Sempre que você não entender um comando, leia o manual. Nesse caso, man wc mostrará a você que:

DESCRIPTION
   Print newline, word, and byte counts for each FILE, and a total line if
   more than one FILE is specified. [...] A  word  is a non-zero-length
   sequence of characters delimited by white space.

Então, os três números são i) o número de linhas; ii) o número de palavras; e iii) o número de bytes. Portanto, se eu executar este diretório:

$ ls -l
total 0
-rw-r--r-- 1 terdon terdon 0 Oct 19 14:29 file1
-rw-r--r-- 1 terdon terdon 0 Oct 19 14:29 file2
-rw-r--r-- 1 terdon terdon 0 Oct 19 14:29 file3

Ele retornará:

$ ls -l | wc
    4      29     152

Isso porque, como você pode ver acima, existem 4 linhas de saída, que contêm 29 "palavras" (uma palavra é definida por espaço em branco) e um total de 152 bytes (observe que isso inclui o caractere newline ( \n ) no final de cada linha).

Para um exemplo mais simples, tente:

$ echo "foo" | wc  
    1    1     4

O comando echo "foo" na verdade imprime foo\n (o \n é o caractere de nova linha), de modo que é uma linha, uma palavra e 4 bytes.

Tenha em atenção que o terceiro campo é o número de bytes, não caracteres. Isso é particularmente importante em locais onde os caracteres podem ser feitos de vários bytes, como quando usamos UTF-8 (tende a ser a norma hoje em dia).

$ echo fée | wc
    1    1    5

No UTF-8, o caractere é é formado por dois bytes. Você pode usar a opção -m para obter o número de caracteres ( m é para caracteres multibyte ).

$ echo fée | wc -m
4
    
por 19.10.2015 / 13:32