GNU/Linux >> Tutoriales Linux >  >> Linux

Encuentre todos los archivos de cero bytes en directorios y subdirectorios

Bash 4+ probado:esta es la forma correcta de buscar el tamaño 0:

find /path/to/dir -size 0 -type f -name "*.xml"

Busque múltiples extensiones de archivo de tamaño 0:

find /path/to/dir -size 0 -type f \( -iname \*.css -o -iname \*.js \)

Nota:Si eliminó \( ... \) los resultados serían todos los archivos que cumplen con este requisito, por lo que se ignoraría el tamaño 0.


Como complemento a las respuestas anteriores:

Si desea eliminar esos archivos

find $dir -size 0 -type f -delete

No, no tienes que molestarte con grep.

find $dir -size 0 ! -name "*.xml"

Para imprimir los nombres de todos los archivos en y debajo de $dir de tamaño 0:

find "$dir" -size 0

Tenga en cuenta que no todas las implementaciones de find producirá una salida de forma predeterminada, por lo que es posible que deba hacer:

find "$dir" -size 0 -print

Dos comentarios sobre el bucle final en la pregunta:

En lugar de iterar sobre cada palabra de una cadena y ver si los valores alternativos son cero, puede eliminar parcialmente el problema que tiene con los espacios en blanco iterando sobre las líneas. por ejemplo:

printf '1 f1\n0 f 2\n10 f3\n' | while read size path; do
    test "$size" -eq 0 && echo "$path"; done

Tenga en cuenta que esto fallará en su caso si alguna de las rutas de salida de ls contiene líneas nuevas, y esto refuerza 2 puntos:no analizar ls y tener una política de nomenclatura sensata que no permita espacios en blanco en las rutas.

En segundo lugar, para generar los datos del ciclo, no es necesario almacenar la salida en una variable solo para echo eso. Si simplemente deja que el ciclo escriba su salida en stdout, logrará lo mismo pero evitará almacenarlo.


Linux
  1. Cambiar el nombre de todos los archivos y nombres de directorios a minúsculas en Linux

  2. Enumere recursivamente todos los archivos en un directorio, incluidos los archivos en los directorios de enlaces simbólicos

  3. Buscar y cambiar el nombre de un directorio

  4. ¿Cómo puedo copiar recursivamente todos los archivos pdf en un directorio (y sus subdirectorios) en un solo directorio de salida?

  5. Copiar todos los archivos dentro de subdirectorios y renombrarlos en lugar de sobrescribirlos

Linux:busque el número de archivos en un directorio y subdirectorios

Buscar y copiar archivos

¿Cómo grep una cadena en un directorio y todos sus subdirectorios?

Eliminar archivos coincidentes en todos los subdirectorios

enumerar/buscar todos los archivos normales en todos los subdirectorios, excepto los archivos binarios

¿Cómo eliminar todos los archivos en un directorio excepto algunos?