Esta sola línea es la forma más eficaz de encontrar el 100% nul archivos usando GNU find
, xargs
y 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 denied
advertencias.
grep
dejará de leer datos de los archivos después de encontrar cualquier byte que no sea nulo ( LC_ALL=C
se 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
grep
procesos 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 -Z
opción ay grep
usarla 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 find
opciones -P
para evitar seguir enlaces simbólicos y -xdev
para 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 .