Tenga en cuenta que esto descenderá recursivamente a subdirectorios y eliminará incondicionalmente todos los archivos de menos de 1 megabyte. Ten cuidado.
te estás perdiendo el argumento del camino haciafind
@ Inútil: Eso es GNU find. :)
Sven Marnach
2
@DanielAndersson: findrestringe el número de argumentos para que el proceso llamado se ajuste a los límites del sistema, en contraste con lo rm *que se garantiza que es una invocación de un solo proceso. findinvocará varias instancias de rmsi es necesario. Y estoy bastante seguro de que los caracteres especiales se tratan correctamente, incluidos los caracteres de nueva línea. Yo prefiero -exec rmmás -deletepor razones de flexibilidad - como ejemplo, que el segundo ofrece ninguna manera de borrar archivos protegidos contra escritura.
Sven Marnach
1
@Invoker: Revertí su cambio ya que era incorrecto. -1Msignifica menos de un megabyte como se desee. Su versión eliminaría todos los archivos con exactamente un megabyte de tamaño, lo que parece ser una operación algo inútil.
Sven Marnach
2
Para cualquier persona interesada, si desea eliminar todos los archivos mayores de 1M, use el comando find . -type f -size +1M -exec rm {} +. Tenga en cuenta el + 1M en lugar de -1M.
@Invoker, creo que el -signo es un signo menos que significa "menos de 1M". Si ejecuta find <directory> -type f -size +1M -delete, eliminará todos los archivos de más de 1M.
chessofnerd
sí, tienes razón, mi mal
Invoker
2
Solo por variedad y una posible ganancia de rendimiento (probablemente marginal):
find <directory>-type f -size -1M-print0 | xargs -0 rm
¿Cómo se supone que esto sea más rápido? Comienza un xargsproceso adicional .
Sven Marnach
¡Ahora puede tener dos CPU compitiendo por el mismo dispositivo de bloque! Más sensiblemente, las operaciones stat / readdir no están bloqueadas sincrónicamente por la operación de desvinculación. Si es probable que esto sea mejor obviamente depende del tamaño del subárbol, el número de archivos, el dispositivo, etc.
Las respuestas sobre SO deben ser independientes, no publique un simple enlace. (Además, el código en la publicación vinculada elimina archivos vacíos en lugar de archivos menores de 1M.)
Sven Marnach
@SvenMarnach no podemos usar $ file_size <1M en el enlace de ejemplo de código dado.
No, no podemos, ya que el caparazón no lo entenderá 1M.
Sven Marnach
Por 1M quise decir 1048576 convertir 1MB a byte
1
Bueno, si prueba si esto realmente funciona y copia el código a su respuesta, esto podría convertirse en una respuesta SO.
Respuestas:
Esto se puede hacer con
find
:Tenga en cuenta que esto descenderá recursivamente a subdirectorios y eliminará incondicionalmente todos los archivos de menos de 1 megabyte. Ten cuidado.
fuente
find
find
. :)find
restringe el número de argumentos para que el proceso llamado se ajuste a los límites del sistema, en contraste con lorm *
que se garantiza que es una invocación de un solo proceso.find
invocará varias instancias derm
si es necesario. Y estoy bastante seguro de que los caracteres especiales se tratan correctamente, incluidos los caracteres de nueva línea. Yo prefiero-exec rm
más-delete
por razones de flexibilidad - como ejemplo, que el segundo ofrece ninguna manera de borrar archivos protegidos contra escritura.-1M
significa menos de un megabyte como se desee. Su versión eliminaría todos los archivos con exactamente un megabyte de tamaño, lo que parece ser una operación algo inútil.find . -type f -size +1M -exec rm {} +
. Tenga en cuenta el + 1M en lugar de -1M.Esto debería hacer el trabajo:
fuente
-
signo es un signo menos que significa "menos de 1M". Si ejecutafind <directory> -type f -size +1M -delete
, eliminará todos los archivos de más de 1M.Solo por variedad y una posible ganancia de rendimiento (probablemente marginal):
fuente
xargs
proceso adicional .Tratar
fuente
\;
al final en lugar de+
Puede consultar este enlace http://ayaz.wordpress.com/2008/02/05/bash-quickly-deleting-empty-files-in-a-directory/ , tiene exactamente lo que desea.
Puede recorrer todos los archivos con un bucle for y luego usar du y awk para encontrar el tamaño de archivo como en el ejemplo anterior.
fuente
1M
.