Como posso encontrar arquivos maiores/menores que x bytes?

Como posso encontrar arquivos maiores/menores que x bytes?

Em um terminal, como posso encontrar arquivos maiores ou menores que x bytes?

Suponho que posso fazer algo como

find . -exec ls -l {} \;

e então canalize o resultado paraawkpara filtrar por tamanho de arquivo. Mas não deveria haver uma maneira mais fácil do que esta?

Responder1

Usar:

find . -type f -size +4096c

para encontrar arquivos maiores que 4.096 bytes.

E :

find . -type f -size -4096c

para localizar arquivos menores que 4.096 bytes.

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

A -sizemudança explicou:

-size n[cwbkMG]

    File uses n units of space. The following suffixes can be used:

    `b'    for 512-byte blocks (this is the default if no suffix  is
                                used)

    `c'    for bytes

    `w'    for two-byte words

    `k'    for Kilobytes       (units of 1024 bytes)

    `M'    for Megabytes    (units of 1048576 bytes)

    `G'    for Gigabytes (units of 1073741824 bytes)

    The size does not count indirect blocks, but it does count
    blocks in sparse files that are not actually allocated. Bear in
    mind that the `%k' and `%b' format specifiers of -printf handle
    sparse files differently. The `b' suffix always denotes
    512-byte blocks and never 1 Kilobyte blocks, which is different
    to the behaviour of -ls.

Responder2

Acho findque pode ser útil sozinho, sem canalizar para o AWK. Por exemplo,

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

O til indica onde você deseja que sua pesquisa comece e o resultado deve exibir apenas arquivos maiores que 2 kilobytes.

Para deixar mais sofisticado, você pode usar a -execopção de executar outro comando que lista esses diretórios com seus tamanhos.

Para mais informações, leia opágina de manual parafind.

Responder3

AWK é realmente muito fácil para esse tipo de coisa. Aqui estão algumas coisas que você pode fazer em relação à verificação do tamanho do arquivo, como você pediu:

Listar arquivos com mais de 200 bytes:

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

Liste arquivos com menos de 200 bytes e grave a lista em um arquivo:

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

Liste os arquivos de 0 bytes, grave a lista em um arquivo e exclua os arquivos vazios:

ls -l | awk '{if ($5 == 0) print $8}' | tee -a deletelog | xargs rm

Responder4

Usandofd, que é muito mais agradável de usar do quefind

fd -S +1g

irá procurar no diretório atual por arquivos maiores que 1 GB

fd -S -1g

irá procurar por arquivosmenorde 1 GB

informação relacionada