Probablemente porque el autor de la pregunta lo pidió lsy usted lo usó find;) Sin embargo
subí
2
Si usa "find. -Not -empty -ls" también incluirá el directorio actual (es decir, "." En su salida), para incluir los archivos actuales use "find. -Type f -not -empty -ls"
user672009
19
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.
Para evitar una advertencia, debe colocarla -maxdepth 1antes -size +0. También -printes la acción predeterminada, por lo que no es necesaria.
cYrus
@cYrus - No hay advertencias para mí (cygwin)
Nifle
Las implementaciones 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.
lsy usted lo usófind;) Sin embargoEste es un trabajo para encontrar ls no es lo suficientemente poderoso.
-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 que0bytes.0se puede cambiar a cualquier tamaño que desee.-printle dice a find que imprima la ruta completa al archivo que encuentraEditar:
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.fuente
-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. GNUfind(que es muy común) se producirá una advertencia si se pone-sizeantes-maxdepth.find dirname -type f ! -emptyfuente
Si tiene la intención de usar
ls, necesita un poco de ayuda deawk.fuente
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):Los usuarios de otros shells deben usar find. Con GNU find (como se encuentra principalmente en Linux):
Una forma compatible con POSIX es:
Si
lsno era solo un ejemplo y que simplemente la intención inspección visual, se puede ordenar por tamaño:ls -S.fuente
funcionará mejor si desea todos los archivos no vacíos, en lugar de solo directorios.
fuente
Bash 4.0+
fuente