Respuestas:
Lo usaría find dirname -not -empty -ls, suponiendo que GNU encuentre.
lsy 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 +0Esto le dice a Find que busque archivos con un tamaño mayor que 0bytes. 0se 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 finterruptor anterior. Esto le dice a find que solo busque archivos. Y como se señala en los comentarios a continuación, el -printcambio no es realmente necesario.
-maxdepth 1antes -size +0. También -printes la acción predeterminada, por lo que no es necesaria.
findvarí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 -sizeantes -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 Lusar 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 lsno 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