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.
ls
y 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 +0
Esto le dice a Find que busque archivos con un tamaño mayor que0
bytes.0
se puede cambiar a cualquier tamaño que desee.-print
le dice a find que imprima la ruta completa al archivo que encuentraEditar:
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.fuente
-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. GNUfind
(que es muy común) se producirá una advertencia si se pone-size
antes-maxdepth
.find dirname -type f ! -empty
fuente
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
L
usar 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
ls
no 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