Entonces, obtuve un directorio lleno de otros directorios, y me preguntaba si era posible eliminar archivos que no tienen tamaño. Por lo general, estos archivos son de 0 bytes y dado que quiero fusionar todos estos subdirectorios, podría reemplazar un archivo perfectamente legítimo con un archivo de 0 bytes sin peso, y ahí está mi archivo legítimo. ¿Alguna forma de eliminar los archivos de cero bytes?
command-line
files
usuario245115
fuente
fuente
-empty
lugar de-size 0b
.Busque y elimine todos los archivos con un tamaño de 0 recursivamente:
Ejemplo:
fuente
También puedes hacerlo directamente en el shell. Esto podría ser útil si no desea eliminar archivos ocultos vacíos (aquellos cuyo nombre comienza con a
.
). Si bien también podría hacerlofind
, una alternativa sería usar el shell en sí:Explicación
shopt -s globstar
: activa la opción globstar para bash que hace**
coincidir uno o más subdirectorios.**/*
coincidirá con todos los archivos y directorios en el directorio actual y todos sus subdirectorios.for file in **/*; do ...; done
: iterar sobre todos los archivos y directorios encontrados;[ ! -s "$file" ]
:[ -s "$file" ]
es verdadero si el archivo existe y no está vacío. Por lo tanto,[ ! -s "$file" ]
(lo!
inverso a la prueba) es cierto si el archivo no existe o si está vacío.[ -f "$file" ]
: verdadero si el archivo es un archivo normal. No es un directorio o un archivo de dispositivo o un enlace simbólico, etc.rm "$file"
: borra el archivo.La
&&
asegurar que el próximo comando sólo se ejecuta si el anterior fue un éxito por lo que esto sólo eliminar archivos vacíos, regulares.fuente
Aunque la mayoría de las respuestas anteriores son correctas, eche un vistazo a este comando:
aunque puedes ejecutar este comando:
Esto eliminará todos los archivos vacíos.
Puedes echar un vistazo a esos archivos antes de eliminarlos:
fuente
-type f
,-empty
también eliminará directorios vacíos. Acabo de revisar la página del manual.