Respuestas:
Lo usaría find dirname -not -empty -ls
, suponiendo que GNU encuentre.
ls
y usted lo usó find
;) Sin embargo
Este es un trabajo para encontrar ls no es lo suficientemente poderoso.
find -maxdepth 1 -size +0 -print
-maxdepth 1
- esto le dice a find que busque solo el directorio actual, elimine para buscar en todos los subdirectorios o cambie el número para bajar 2, 3 o más niveles.
-size +0
Esto le dice a Find que busque archivos con un tamaño mayor que 0
bytes. 0
se puede cambiar a cualquier tamaño que desee.
-print
le dice a find que imprima la ruta completa al archivo que encuentra
Editar:
adición tardía: probablemente también deba agregar el -type f
interruptor anterior. Esto le dice a find que solo busque archivos. Y como se señala en los comentarios a continuación, el -print
cambio no es realmente necesario.
-maxdepth 1
antes -size +0
. También -print
es la acción predeterminada, por lo que no es necesaria.
find
varían mucho en términos de qué opciones válidas son y hacia dónde pueden ir. GNU find
(que es muy común) se producirá una advertencia si se pone -size
antes -maxdepth
.
Ls casi no tiene opción para filtrar archivos: ese no es su trabajo. Filtrar archivos es el trabajo del shell para casos simples (a través de globbing) y el trabajo de encontrar para casos complejos.
En zsh, puede L
usar el calificador global para retener solo archivos cuyo tamaño es> 0 (el .
calificador se restringe a los archivos normales):
ls *(.L+0)
Los usuarios de otros shells deben usar find. Con GNU find (como se encuentra principalmente en Linux):
find -maxdepth 1 -type f ! -empty -exec ls {} +
Una forma compatible con POSIX es:
find . -type f -size +0c -exec ls {} + -o -name . -o -prune
Si ls
no era solo un ejemplo y que simplemente la intención inspección visual, se puede ordenar por tamaño: ls -S
.
Bash 4.0+
shopt -s globstar
shopt -s nullglob
for file in **/*; do test -f "$file" && [[ -s "$file" ]] && echo "$file"; done