¿Cómo puedo encontrar archivos que sean más grandes / más pequeños que x bytes?

237

En una terminal, ¿cómo puedo encontrar archivos que sean más grandes o más pequeños que x bytes?

Supongo que puedo hacer algo como

find . -exec ls -l {} \;

y luego canalice el resultado awkpara filtrar por tamaño de archivo. ¿Pero no debería haber una manera más fácil que esta?

gato de techo
fuente

Respuestas:

377

Utilizar:

find . -type f -size +4096c

para encontrar archivos de más de 4096 bytes.

Y:

find . -type f -size -4096c

para encontrar archivos de menos de 4096 bytes.

Observe la diferencia + y - después del cambio de tamaño.

El -sizeinterruptor explicó:

-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.
John T
fuente
11
@ Jay: Desde man find al comienzo de la sección "Pruebas": "Los argumentos numéricos se pueden especificar como + n para mayor que n, -n para menor que n, n para exactamente n".
Dennis Williamson
44
La página de manual lo menciona en la parte superior y describe que + y - se pueden aplicar a todos los interruptores que toman argumentos numéricos ('n'), incluido lo que significa + y -. (Busque PRUEBAS en la página del manual para encontrar el comienzo de la sección donde se describe esto)
Slartibartfast
1
@Dennis Williamson: extraño, + y - funcionan en OS X, pero la página del manual no tiene la sección PRUEBAS. De hecho, le falta una gran parte en comparación con su enlace, le faltan PRUEBAS, ACCIONES, OPERADORES, entre otros.
gato de techo
1
Parece que la versión GNU de la página del manual tiene la sección "Pruebas", pero la versión BSD no. linuxmanpages.com/man1/find.1.php
Jay
8
Me acabo de enterar de que las páginas de manual de BSD describen la cosa +/-. Su camino al final de la sección "Primarias". - Todas las primarias que toman un argumento numérico permiten que el número sea precedido por un signo más ("+") o un signo menos ("-"). Un signo más precedente significa "más que n", un signo menos precedente significa "menos que n" y ninguno significa "exactamente n"
Jay
7

Creo que findpodría ser útil solo sin canalizar a AWK. Por ejemplo,

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

La tilde indica dónde desea que comience su búsqueda y el resultado debe mostrar solo archivos de más de 2 kilobytes.

Para hacerlo más elegante, puede usar la -execopción para ejecutar otro comando que consiste en enumerar estos directorios con sus tamaños.

Para obtener más información, lea la página de manual defind .

Siobhan
fuente
4

AWK realmente es bastante fácil para este tipo de cosas. Aquí hay algunas cosas que puede hacer con él en relación con la verificación del tamaño del archivo, como lo pidió:

Lista de archivos de más de 200 bytes:

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

Liste los archivos de menos de 200 bytes y escriba la lista en un archivo:

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

Enumere archivos de 0 bytes, grabe la lista en un archivo y elimine los archivos vacíos:

ls -l | awk '{if ($5 == 0) print $8}' | tee -a deletelog | xargs rm
MaQleod
fuente
¿Cuál es la diferencia entre canalizar teey simplemente redirigir a un archivo, como ls -l > filelog(o ls -l >> filelog)?
OmarOthman
3

Mayor de 2000 bytes:

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

Menos de 2000 bytes:

du -a . | awk '$1*512 < 2000 {print $2} '
Arrendajo
fuente
Esto es malo ya que du da el espacio en el disco ocupado. Esto no es lo mismo que un tamaño de archivo. por ejemplo, si tiene un sistema de archivos comprimido (btrfs / zfs) du le dará un resultado diferente de ls que muestra el tamaño descomprimido real.
Chris Scott