vaciar una para los logs eliminar dentro contenido comando carpeta borrar archivos archivo linux file find xargs delete-file

una - ¿Cómo eliminar muchos archivos de 0 bytes en Linux?



eliminar los archivos de una carpeta linux (8)

Aquí hay un ejemplo, intentarlo tú mismo ayudará a que tenga sentido:

bash-2.05b$ touch empty1 empty2 empty3 bash-2.05b$ cat > fileWithData1 Data Here bash-2.05b$ ls -l total 0 -rw-rw-r-- 1 user group 0 Jul 1 12:51 empty1 -rw-rw-r-- 1 user group 0 Jul 1 12:51 empty2 -rw-rw-r-- 1 user group 0 Jul 1 12:51 empty3 -rw-rw-r-- 1 user group 10 Jul 1 12:51 fileWithData1 bash-2.05b$ find . -size 0 -exec rm {} /; bash-2.05b$ ls -l total 0 -rw-rw-r-- 1 user group 10 Jul 1 12:51 fileWithData1

Si echas un vistazo a la página man para encontrar (escribe man find ), verás una gran variedad de potentes opciones para este comando.

Tengo un directorio con muchos archivos de 0 bytes. Ni siquiera puedo ver los archivos cuando uso el comando ls. Estoy usando una pequeña secuencia de comandos para eliminar estos archivos, pero a veces eso ni siquiera elimina estos archivos. Aquí está el guión:

i=100 while [ $i -le 999 ];do rm -f file${i}*; let i++; done

¿Hay alguna otra manera de hacer esto más rápido?


Eliminar todos los archivos con nombre de archivo ... en el directorio actual:

find . -name file* -maxdepth 1 -exec rm {} /;

Esto todavía llevará mucho tiempo, ya que comienza rm para cada archivo.


Puede usar el siguiente comando:

encontrar . -maxdepth 1 -size 0c -exec rm {} /;

Y si también está buscando eliminar los archivos de 0 bytes en los subdirectorios, omita -maxdepth 1 en el comando anterior y ejecútelo.


Subiendo un nivel, vale la pena averiguar por qué los archivos están allí. Solo está tratando un síntoma eliminándolos. ¿Qué pasa si algún programa los está usando para bloquear recursos? Si es así, borrarlos podría conducir a la corrupción.

lsof es una forma de averiguar qué procesos manejan los archivos vacíos.


Usa find combinado con xargs .

find . -name ''file*'' -size 0 -print0 | xargs -0 rm

Evita iniciar rm para cada archivo.


incluso puede usar la opción -delete que eliminará el archivo.

de man find, -delete Delete files; verdadero si la eliminación tuvo éxito.


"... a veces eso ni siquiera borra estos archivos" me hace pensar que esto podría ser algo que haces regularmente. Si es así, este script Perl eliminará cualquier archivo normal de cero bytes en su directorio actual. Evita por completo el uso de una llamada al sistema (desvincular), y es bastante rápido.

#!/usr/bin/env perl use warnings; use strict; my @files = glob "* .*"; for (@files) { next unless -e and -f; unlink if -z; }


Con GNU''s find (ver comentarios), no es necesario usar xargs:

find -name ''file*'' -size 0 -delete