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


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

Supongo que puedo hacer algo como

find . -exec ls -l {} \;

y luego canalizar el resultado a awk para filtrar por tamaño de archivo. Pero, ¿no debería haber una manera más fácil que esto?


183


origen




Respuestas:


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.

los -size interruptor explicado:

-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.

285



@Jay: De hombre encuentra al comienzo de la sección "Pruebas": "Los argumentos numéricos se pueden especificar como + n para mayor que n, -n por menos de n, n por exactamente n". - Dennis Williamson
La página de manual lo menciona hacia la parte superior y describe que + y - puede aplicarse a todos los switches que toman argumentos numéricos ('n'), incluyendo qué + y - significa. (Busque TESTS en la página man para encontrar el comienzo de la sección donde se describe) - Slartibartfast
Parece que la versión GNU de la página man tiene la sección "Pruebas", pero la versión BSD no. linuxmanpages.com/man1/find.1.php - Jay
La página del manual de Solaris tiene una sección de "Expresión" que también lo explica. docs.sun.com/app/docs/doc/816-0210/6m6nb7m9j?l=en&a=view - Jay
Acabo de descubrir que las páginas del manual de BSD describen la cosa +/-. Su camino al final de la sección "Primarios". - Todos los primarios 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


creo find podría ser útil solo sin conectar 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 que le guste, puede usar el -exec opción para ejecutar otro comando que es listar estos directorios con sus tamaños.

Para más información, lee el página de hombre para find.


6





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

Lista de archivos de más de 200 bytes:

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

Listar archivos de menos de 200 bytes y escribir la lista en un archivo:

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

Listar archivos de 0 bytes, registrar la lista en un archivo y eliminar los archivos vacíos:

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

4



análisis ls no es bueno - phuclv
¿Cuál es la diferencia entre la tubería para tee y solo redirigir a un archivo, como ls -l > filelog (o ls -l >> filelog)? - OmarOthman


Más de 2000 bytes:

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

Menos de 2000 bytes:

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

3