Respuestas:
Esto se puede hacer con find:
find . -type f -size -1M -exec rm {} +
Tenga en cuenta que esto descenderá recursivamente a subdirectorios y eliminará incondicionalmente todos los archivos de menos de 1 megabyte. Ten cuidado.
find. :)
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.
-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.
find . -type f -size +1M -exec rm {} +. Tenga en cuenta el + 1M en lugar de -1M.
Esto debería hacer el trabajo:
$ find <directory> -type f -size -1M -delete
-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.
Solo por variedad y una posible ganancia de rendimiento (probablemente marginal):
find <directory> -type f -size -1M -print0 | xargs -0 rm
xargsproceso adicional .
Puede consultar este enlace http://ayaz.wordpress.com/2008/02/05/bash-quickly-deleting-empty-files-in-a-directory/ , tiene exactamente lo que desea.
for file in *;
do
file_size=$(du $file | awk '{print $1}');
if [ $file_size == 0 ]; then
echo "Deleting empty file $file with file size $file_size!";
echo "rm -f $file";
fi;
done
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.
1M.