Sim, existem esses casos.
No caso de links simbólicos no sistema Linux com GNU ls , o ls -l exibirá o tamanho do link, enquanto wc -c resolverá o arquivo real e lerá o número de bytes lá. Abaixo, você pode ver que ls -l informa 29 bytes, enquanto wc informa 172 bytes no arquivo real.
$ ls -l /etc/resolv.conf
lrwxrwxrwx 1 root root 29 1月 17 2016 /etc/resolv.conf -> ../run/resolvconf/resolv.conf
$ wc -c /etc/resolv.conf
172 /etc/resolv.conf
$ wc -c /var/run/resolvconf/resolv.conf
172 /var/run/resolvconf/resolv.conf
$ ls -l /var/run/resolvconf/resolv.conf
-rw-r--r-- 1 root root 172 1月 15 15:49 /var/run/resolvconf/resolv.conf
No caso de sistemas de arquivos virtuais , como /proc ou /sys , muitos arquivos serão mostrados como tendo tamanho 0 ls -l . Sob o sistema de arquivos /dev , temos vários arquivos especiais, como dispositivos de caracteres e dispositivos de bloco - wc -c trava e ls -l mostra
Os pipes nomeados serão informados como 0 bytes por ls -c , mas wc -c lerá o conteúdo do canal, então, tecnicamente, ele informará quantos dados estão no canal. pipe nomeado:
$ mkfifo named.pipe
$ echo "This is a test" > named.pipe &
[1] 2129
$ ls -l named.pipe
prw-rw-r-- 1 xieerqi xieerqi 0 1月 16 08:40 named.pipe|
$ wc -c named.pipe
15 named.pipe
[1] + Done echo "This is a test" >named.pipe
Para arquivos regulares, o tamanho deve ser igual.
O ponto de ls -l e wc -c e como eles funcionam também difere. wc -c na verdade abre o arquivo para leitura (você pode ver isso se você executar strace wc -c /etc/passwd por exemplo). ls -l realiza apenas stat() sobre esses. Isso também explica porque em /proc ls -l mostra tamanho 0 - você não pode registrar esses arquivos porque eles não são "reais" ou realmente armazenados no disco rígido / ssd. wc -c , lê os conteúdos desse arquivo e calcula seu tamanho.
Por fim, ls -l é apenas uma ferramenta para listar itens de forma interativa. Raramente é um bom ajuste para scripts. Quando você realmente precisa ler os dados, use wc -c .
Por favor, note que para o script e avaliar o tamanho de um arquivo, ls não é o melhor candidato. Na verdade, é uma das práticas comuns para evitar a análise de ls output . Por favor, use du -b para descobrir o tamanho de um arquivo.