ls-command: ¿cómo mostrar el tamaño del archivo en megabytes?

161

En Unix (Tru64), ¿cómo hago para que el lscomando muestre el tamaño del archivo en megabytes? Actualmente puedo mostrarlo en bytes usando lo siguiente:

ls -la
phuclv
fuente

Respuestas:

247

Quizás -hsea ​​suficiente para ti:

-h
Cuando se usa con la opción -l, use sufijos de unidad: Byte, Kilobyte, Megabyte, Gigabyte, Terabyte y Petabyte para reducir el número de dígitos a tres o menos usando la base 2 para los tamaños.

ls -lah

Consejo general: Utilícelo man commandnamepara leer el manual / ayuda de un determinado comando, por ejemplo, aquí man ls.

Felix
fuente
1
Gracias, pero la opción -h no parece existir en Tru64 Unix.
8
Consejo general: instale utilidades GNU ...
reinierpost
22
Me gusta su consejo sobre el uso de man, pero realmente, buscar en Google es mucho más rápido que usar man la mayor parte del tiempo (como ahora, cuando encontré este resultado en Google).
trusktr
44
Google está bien y todo para sugerencias generales, pero en última instancia, las páginas de manual son sistema / SO, incluso específicas del host, generalmente creadas cuando el software se compila o instala, y por lo tanto, son autorizadas para el software en su sistema particular.
Nevin Williams
1
Solo para cerrar el
MariusMatutiae
32

ls --block-size=Mimprime los tamaños en megabytes pero muestra 1 MB también para cualquier cosa por debajo de 1 MB Sin embargo, no estoy seguro de si esta opción es aceptable en su versión UNIX de ls.

En realidad, ls -lhtambién imprime tamaños en Gigabytes si el archivo es lo suficientemente grande (Bueno, de todos modos: en Linux 64 bits esto funciona:>)

En un nodo lateral: du -sh *imprime también los tamaños de directorio en el directorio actual.

Ene.
fuente
¡Gracias! Necesitaba monitorear los cambios de archivos en vivo en una carpeta y usarlos no ls -htiene sentido después de que un archivo crece más de 1 GB, así que uso este comando en un bucle de 1 segundo:while true ; do ls -al --block-size=M ; sleep 1 ; done
ccpizza
15

Tendrás que usar awkpara hacer los cálculos por ti:

ls -l | awk 'BEGIN{mega=1048576} $5 >= mega {$5 = $5/mega "MB"} {print}'

Esto no afectará la salida de archivos que son más pequeños que mega.

Es posible que deba ajustar el número de campo para que coincida con la forma en que lsse presenta Puede cambiar megaa "1000000" si esa es su preferencia.

Esto imprimirá más decimales de los que probablemente desee. Podría implementar una función de redondeo.

Dennis Williamson
fuente
3
Mucho menos elegante que ls -lho ls --block-size=M, ¡pero AWK es muy útil!
Statwonk
Justo lo que necesitaba. Todas las demás soluciones se redondean al MB más cercano, pero esto muestra algunos decimales y es fácilmente personalizable.
zeroimpl
3
Esta es una buena solución para esos sistemas (AIX - Te estoy mirando) que no tienen la opción -h.
Buggabill
14

intente ls -shRcon el formato recursivo legible por humanos.

Clasificador
fuente
44
OP ha declarado que no existe -hen Tru64 , y lo hizo más de dos años antes de que se publicara esta respuesta.
un CVn
3
Pensé que es mi responsabilidad ayudar a aquellos que llegan aquí con la misma búsqueda de Google.
Clasificador
8

prueba ls -lash, imprime tamaños en formato legible para humanos

n0pe
fuente
5

du -sm filename.txt

Éter
fuente
1
siempre redondea el tamaño ... si el tamaño es inferior a 1 MB, digamos 500K, también imprimirá 1M
AnonGeek
5

También puedes escribir

du -sh ./*

Esto mostrará una lista de todas las carpetas en el directorio actual, con formato legible, incluidos los tamaños de archivo más familiares en Kb, Mb, Gb.

Keng
fuente
2

Si solo desea el tamaño de un archivo específico, entonces el comando, una extrapolación trivial de las respuestas anteriores, es:

ls -sh nombre (s) de archivo

-ses para el tamaño y hes para lectura humana (como se mencionó anteriormente varias veces).

La salida se verá así:

753M myfilename

Si omite los nombres de archivo, enumerará el directorio, colocando el tamaño de cada archivo junto a su nombre, no muy diferente de lo que ls -lahace cuando se invoca sin argumentos de nombre de archivo.

Espero que esto ayude.

Rob Jones
fuente
2
Esta pregunta es sobre Tru64 Unix, y el OP declaró hace casi cinco años que la -hopción no existe en lsese sistema.
G-Man
2
ls -l --block-size=MB 

Para el --block-sizeparámetro:

  • utilizar MBpara 10 ^ 6
  • usar solo Mpor 2 ^ 20
Evan
fuente
Tenga en cuenta que esto no mostrará ningún lugar decimal . También, algo por encima de 0 kB, pero ni mayor de 1 MB se mostrará como1MB . Por esta razón, me pareció ls -l --block-size=kBmás útil.
DaAwesomeP
0

Si solo está interesado en el tamaño del archivo y no tiene que usar el lscomando, intente lo siguiente:

# echo "Hello World" > file.txt
# ls -l file.txt 
-rw-r--r-- 1 user user 12 Mar 10 11:32 file.txt
# stat --printf='%s\n' file.txt
12

Esto imprimirá el tamaño del archivo sin la necesidad de analizar nada.

SKN
fuente
OP desea el tamaño en MB, ¿tal vez una opción estadística producirá el tamaño en forma legible para humanos?
Archemar
Ah, eso fue tonto de mi parte. Gracias por atrapar eso. stat no tiene una opción para manipular el tamaño usando --printf o cualquier otra opción que yo sepa. Es probable que requiera el uso de una combinación de utilidades de línea de comandos printf y bc. En cuyo caso, ¿por qué molestarse? ls y cut / awk serían más rápidos.
SKN