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
. :)
find
restringe 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. find
invocará varias instancias de rm
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:
$ 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
xargs
proceso 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
.