Esta sola línea es la forma más eficaz de encontrar el 100% nul archivos usando GNU find, xargsy grep(suponiendo que este último está construido con el apoyo PCRE):
find . -type f -size +0 -readable -print0 |
LC_ALL=C xargs -r0 grep -LP "[^\x00]" --
Las ventajas de este método sobre otras respuestas proporcionadas son:
- los archivos no dispersos se incluyen en la búsqueda.
- los archivos no legibles no se pasan a grep, evitando
Permission deniedadvertencias.
grepdejará de leer datos de los archivos después de encontrar cualquier byte que no sea nulo ( LC_ALL=Cse utiliza para asegurarse de que cada byte se interprete como un carácter ).
- Los archivos vacíos (cero bytes) no se incluyen en los resultados.
- Menos
grepprocesos verifican eficientemente múltiples archivos.
- las rutas que contienen líneas nuevas o que comienzan con
-se manejan correctamente.
- funciona en la mayoría de los sistemas integrados que carecen de Python / Perl.
Pasar la -Zopción ay grepusarla xargs -r0 ...permite realizar más acciones en los archivos 100% nul (por ejemplo: limpieza):
find . -type f -size +0 -readable -print0 |
LC_ALL=C xargs -0 grep -ZLP "[^\x00]" -- |
xargs -r0 rm --
También recomiendo usar las findopciones -Ppara evitar seguir enlaces simbólicos y -xdevpara evitar el desplazamiento de sistemas de archivos (por ejemplo: montajes remotos, árboles de dispositivos, montajes de enlace, etc.).
Para ignorar los caracteres finales de línea , la siguiente variante debería funcionar (aunque no creo que sea una buena idea):
find . -type f -size +0 -readable -print0 |
LC_ALL=C xargs -r0 grep -LP "[^\x00\r\n]" --
Poniendo todo junto, incluida la eliminación de los archivos no deseados (100% nul / caracteres de nueva línea) para evitar que se realicen copias de seguridad:
find -P . -xdev -type f -size +0 -readable -print0 |
LC_ALL=C xargs -0 grep -ZLP "[^\x00\r\n]" -- |
xargs -0 rm --
No recomiendo incluir archivos vacíos (cero bytes), a menudo existen para propósitos muy específicos .