Como posso listar apenas arquivos não vazios usando ls?

28

Como posso listar (usando ls ) todos os arquivos que não estão vazios (tamanho > 0) usando o linux?

    
por David B 23.09.2010 / 14:39

7 respostas

44

Eu usaria find dirname -not -empty -ls , supondo que o GNU encontrasse.

    
por 23.09.2010 / 19:38
17

Este é um trabalho para encontrar ls não é poderoso o suficiente.

find -maxdepth 1 -size +0 -print

-maxdepth 1 - isto diz ao find para pesquisar apenas o diretório atual, remover para procurar em todos os subdiretórios ou alterar o número para descer 2, 3 ou mais níveis.

-size +0 diz ao find para procurar arquivos com tamanho maior que 0 bytes. 0 pode ser alterado para qualquer tamanho que você desejar.

-print informa ao find para imprimir o caminho completo para o arquivo que encontrar

Editar:
Adição tardia: provavelmente você também deve adicionar a opção -type f acima. Isso diz ao find para encontrar apenas arquivos. E, conforme observado nos comentários abaixo, a opção -print não é realmente necessária.

    
por 23.09.2010 / 15:03
9

find dirname -type f ! -empty

    
por 23.09.2010 / 14:51
7

O Ls quase não tem opção de filtrar arquivos: esse não é o seu trabalho. Filtrar arquivos é o trabalho do shell para casos simples (através de globbing) e o trabalho de localizar casos complexos.

Em zsh, você pode usar o qualificador L globbing para reter somente arquivos cujo tamanho seja > 0 (o qualificador . é restrito a arquivos regulares):

ls *(.L+0)

Usuários de outros shells devem usar find. Com o GNU find (como encontrado principalmente no Linux):

find -maxdepth 1 -type f ! -empty -exec ls {} +

Uma maneira compatível com POSIX é:

find . -type f -size +0c -exec ls {} + -o -name . -o -prune

Se ls não fosse apenas um exemplo e você apenas pretendesse fazer uma inspeção visual, poderia classificá-lo por tamanho: ls -S .

    
por 23.09.2010 / 22:11
5
ls -l | awk '{if ($5 != 0) print $9}'

Se você pretende usar ls , precisa de uma pequena ajuda de awk .

    
por 23.09.2010 / 19:17
3
 $ find /* -type f ! -size 0

funcionará melhor se você quiser todos os arquivos não vazios, em vez de apenas diretórios.

    
por 23.09.2010 / 15:07
0

Bash 4.0 +

shopt -s globstar
shopt -s nullglob
for file in **/*; do  test -f "$file" && [[ -s "$file" ]] && echo "$file"; done
    
por 03.10.2010 / 06:33