¿Cómo elimino todos los archivos más pequeños que un tamaño determinado en todas las subcarpetas?

80

Tengo una carpeta con muchas subcarpetas que contienen archivos tif pequeños (menos de 160 kb) que se han fusionado en archivos pdf más grandes, junto con algunos archivos tif de varias páginas.

Quiero eliminar todos los archivos pequeños de tif sin eliminar los archivos más grandes (tif o pdf) y conservar la estructura de directorios. ¿Cómo lo hago en Linux usando la línea de comandos?

To Do
fuente

Respuestas:

138
find . -name "*.tif" -size -160k -delete

Ejecutar el comando sin -delete Primero para verificar que se encuentran los archivos correctos.

Nota la - antes de 160k. Sólo 160k Significa exactamente 160 kilobytes. -160k Significa más pequeño que 160 kilobytes. +160k Significa más grande que 160 kilobytes.

Si desea filtrar el tamaño en bytes (como en 160 bytes en lugar de 160 kilobytes), debe escribirlo así: 160c. Si solo escribes 160 se interpretará como 160 * 512 bytes. Este es un requisito extraño por POSIX. Lea aquí para más detalles: https://unix.stackexchange.com/questions/259208/purpose-of-find-commands-default-size-unit-512-bytes

lesmana
fuente
La página del manual de ubuntu parece mencionar esto. Justo debajo de la sección "PRUEBAS": los argumentos numéricos se pueden especificar como + n para mayor que n, -n para menos que n, n para exactamente n.
jdg
1
Gracias. no se me ocurrió que la información pudiera estar en otro lugar en la página del manual.
lesmana
Es bueno que este comando también funcione recursivamente. Mi caso de uso sería eliminar archivos .txt en 12kB.
Sun
no hay necesidad de sudo?
Jean-François Gagnon
10
Para tamaños en bytes especifique 50c, no 50b o ​​50!
Evengard