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 canalizar el resultado aawk
para filtrar por tamaño de archivo. ¿Pero no debería haber una manera más fácil que ésta?
Respuesta1
Usar:
find . -type f -size +4096c
para buscar archivos de más de 4096 bytes.
Y :
find . -type f -size -4096c
para buscar archivos de menos de 4096 bytes.
Observe la diferencia + y - después del cambio de tamaño.
El -size
interruptor 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.
Respuesta2
Creo find
que podría ser útil solo sin conectarse 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 -exec
opción para ejecutar otro comando que consiste en enumerar estos directorios con sus tamaños.
Para obtener más información, lea elpágina de manual parafind
.
Respuesta3
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 solicitó:
Listar archivos de más de 200 bytes:
ls -l | awk '{if ($5 > 200) print $8}'
Enumere 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, registre la lista en un archivo y elimine los archivos vacíos:
ls -l | awk '{if ($5 == 0) print $8}' | tee -a deletelog | xargs rm
Respuesta4
Usandofd
, que es mucho más agradable de usar quefind
fd -S +1g
buscará en el directorio actual cualquier archivo de más de 1 GB
fd -S -1g
buscará archivosmenorde 1GB