Usando gnu find, creo que esto es lo que quieres. Encuentra todos los archivos reales y no directorios (-type f), y para cada uno imprime el nombre de archivo (% p), una pestaña (\ t), el tamaño en kilobytes (% k), el sufijo "KB", y luego una nueva línea (\ n).
find . -type f -printf '%p\t%k KB\n'
Si el comando printf no formatea las cosas de la forma que desee, puede utilizar exec, seguido por el comando que desea ejecutar en cada archivo. Use {} para el nombre de archivo y finalice el comando con un punto y coma (;). En la mayoría de los proyectiles, los tres de esos personajes deberían escaparse con una barra diagonal inversa.
Aquí hay una solución simple que encuentra y las imprime usando "ls -lh", que le mostrará el tamaño en formato legible (k para kilobytes, M para megabytes):
find . -type f -exec ls -lh \{\} \;
Como otra alternativa más, "wc -c" se imprimirá el número de caracteres (bytes) en el archivo:
find . -type f -exec wc -c \{\} \;
Esta versión ejecutará el proceso "ls" para cada archivo. Si tiene muchos archivos (por ejemplo, más de mil), mejor optimice eso ya sea: 'encontrar. -name '* .ear' -exec ls -lh {} + \; '(extensión GNU) o ' encontrar. -name '* .ear' -print0 | xargs -0 ls -lh'. También puede agregar '-type f' si solo está interesado en los archivos (o agregue' -d' a ls si desea que los directorios se incluyan sin sus contenidos). – ash108
Su respuesta no excluye directorios, por lo que también terminará ejecutando ls en directorios, lo que claramente no es lo correcto. –
Esta es una forma realmente ineficiente de hacer las cosas, y desafortunadamente los comentarios de ash108 tampoco son ideales. Es mucho mejor usar la opción -printf para encontrar. – oskarpearson