2010-10-28 23:09:03 +0000 2010-10-28 23:09:03 +0000
241
241

Como posso encontrar ficheiros maiores/menos que x bytes?

Num terminal, como posso encontrar ficheiros maiores ou mais pequenos que x bytes?

Suponho que posso fazer algo como

find . -exec ls -l {} \;

e depois canalizar o resultado para awk para filtrar por tamanho de ficheiro. Mas não deveria haver uma maneira mais fácil do que esta?

Respostas (4)

386
386
386
2010-10-28 23:37:50 +0000

Utilize:

find . -type f -size +4096c

para encontrar ficheiros maiores que 4096 bytes.

para encontrar ficheiros menores que 4096 bytes.

Repare na diferença + e - após a mudança de tamanho.

A mudança -size explicada:

find . -type f -size -4096c
8
8
8
2015-10-25 22:03:31 +0000

Penso que a find pode ser útil sozinha, sem canalização para a AWK. Por exemplo,

find ~ -type f -size +2k -exec ls -sh {} \;

O til indica onde quer que a sua pesquisa comece e o resultado deve mostrar apenas ficheiros com mais de 2 kilobytes.

Para o tornar extravagante, pode usar a opção -exec para executar outro comando que é listar estes directórios com os seus tamanhos.

Para mais informações, leia a página man para find .

5
5
5
2010-10-29 00:01:20 +0000

A AWK é realmente bastante fácil para este tipo de coisas. Aqui estão algumas coisas que pode fazer com ele em relação à verificação do tamanho do ficheiro, como pediu:

Listar ficheiros superiores a 200 bytes:

ls -l | awk '{if ($5 > 200) print $8}'

Listar ficheiros inferiores a 200 bytes e escrever a lista num ficheiro:

ls -l | awk '{if ($5 < 200) print $8}' | tee -a filelog

Listar ficheiros de 0 bytes, gravar a lista num ficheiro e apagar os ficheiros vazios:

ls -l | awk '{if ($5 == 0) print $8}' | tee -a deletelog | xargs rm
3
3
3
2010-10-28 23:27:11 +0000

Superior a 2000 bytes:

du -a . | awk '$1*512 > 2000 {print $2}'

Menos de 2000 bytes:

du -a . | awk '$1*512 < 2000 {print $2} '