Cuando utilizo ls
o du
, obtengo la cantidad de espacio en disco que ocupa cada archivo.
Necesito la suma total de todos los datos en archivos y subdirectorios que obtendría si abriera cada archivo y contara los bytes. Puntos de bonificación si puedo obtener esto sin abrir cada archivo y contar.
ls
en realidad muestra el número de bytes en cada archivo, no la cantidad de espacio en disco. ¿Es esto suficiente para sus necesidades?du
no se puede utilizar para responder a esta pregunta. Muestra la cantidad de espacio en disco que ocupa el directorio en el disco (los datos de los archivos más el tamaño de la metainformación del sistema de archivos auxiliar). Ladu
salida puede ser incluso menor que el tamaño total de todos los archivos. Esto puede suceder si el sistema de archivos puede almacenar datos comprimidos en el disco o si se utilizan vínculos físicos. Las respuestas correctas se basan enls
yfind
. Vea las respuestas de Nelson y bytepan aquí, o esta respuesta: unix.stackexchange.com/a/471061/152606Respuestas:
Si desea el 'tamaño aparente' (que es el número de bytes en cada archivo), no el tamaño que ocupan los archivos en el disco, use la opción
-b
o--bytes
(si tiene un sistema Linux con GNU coreutils ):fuente
du -shb
(como sugiere esta respuesta), la-b
configuración parece anular la-h
configuración.du -sh --apparent-size /dir/
Utilizar
du -sb
:Opcionalmente, agregue la
h
opción para una salida más fácil de usar:fuente
brew install coreutils
. Estará disponible como comandogdu
.ls
->file.gz hardlink-to-file.gz
.stat -c %s file.gz
->9657212
.stat -c %s hardlink-to-file.gz
->9657212
.du -sb
->9661308
. Definitivamente no es el tamaño total del contenido, sino el tamaño que ocupa el directorio en el disco.cd al directorio, luego:
ftw!
Originalmente escribí sobre esto aquí: https://ao.gl/get-the-total-size-of-all-the-files-in-a-directory/
fuente
-L
opción paradu
seguir los enlaces simbólicos.Solo una alternativa:
grep -v '^d'
excluirá los directorios.fuente
ls -lR | grep '.png$' | awk '{total += $5} END {print "Total:", total/1024/1024, "MB"}'
du
esta solución, realmente cuenta el tamaño total de todos los datos en los archivos como si se abrieran uno por uno y se contaran sus bytes. Pero sí, también-A
es necesario agregar el parámetro para contar los archivos ocultos.El formato "% s" de stat le da el número real de bytes en un archivo.
No dude en sustituir su método favorito para sumar números .
fuente
find -print0
yxargs -0
son necesarios para nombres de archivo con espacios. OS X quierestat -f %z
.du
informes como discos ).du
utilidad, esta respuesta es correcta. Es muy similar a responder aquí: unix.stackexchange.com/a/471061/152606 . Pero también usaría en! -type d
lugar de-type f
contar los enlaces simbólicos (el tamaño del enlace simbólico en sí (generalmente unos pocos bytes), no el tamaño del archivo al que apunta).Si usa "du" de busybox en el sistema emebedded, no puede obtener un byte exacto con du, solo puede obtener Kbytes.
fuente
Cuando se crea una carpeta, muchos sistemas de archivos Linux asignan 4096 bytes para almacenar algunos metadatos sobre el directorio en sí. Este espacio aumenta en un múltiplo de 4096 bytes a medida que crece el directorio.
du command (con o sin la opción -b) tome en cuenta este espacio , como puede ver escribiendo:
tendrá un resultado de 4096 bytes para un directorio vacío. Entonces, si coloca 2 archivos de 10000 bytes dentro del directorio, la cantidad total dada por du -sb sería 24096 bytes.
Si lee atentamente la pregunta, esto no es lo que se preguntó. El interrogador preguntó:
que en el ejemplo anterior debería ser 20000 bytes, no 24096.
Entonces, la respuesta correcta en mi humilde opinión podría ser una combinación de la respuesta de Nelson y la sugerencia de hlovdal para manejar nombres de archivos que contienen espacios:
fuente
Hay al menos tres formas de obtener la "suma total de todos los datos en archivos y subdirectorios" en bytes que funcionan tanto en Linux / Unix como en Git Bash para Windows, enumerados a continuación en orden de más rápido a más lento en promedio. Para su referencia, se ejecutaron en la raíz de un sistema de archivos bastante profundo (
docroot
en una instalación de Magento 2 Enterprise que comprende 71,158 archivos en 30,027 directorios).1.
2.
3.
Estos dos también funcionan, pero se basan en comandos que no existen en Git Bash para Windows:
1.
2.
Si sólo desea que el total para el directorio actual, a continuación, añadir
-maxdepth 1
afind
.Tenga en cuenta que algunas de las soluciones sugeridas no devuelven resultados precisos, por lo que me quedaría con las soluciones anteriores.
fuente
dc
es parte delbc
paquete, por lo que para obtenerlodc
es necesario instalarlobc
.Para Win32 DOS, puede:
c:> dir / sc: \ directorio \ que \ desea
y la penúltima línea le dirá cuántos bytes ocupan los archivos.
Sé que lee todos los archivos y directorios, pero funciona más rápido en algunas situaciones.
fuente
du
es útil, perofind
es útil en caso de que desee calcular el tamaño de algunos archivos solamente (por ejemplo, usando el filtro por extensión). También tenga en cuenta quefind
ellos mismos pueden imprimir el tamaño de cada archivo en bytes. Para calcular un tamaño total podemos conectar eldc
comando de la siguiente manera:Aquí
find
genera una secuencia de comandos para medc
gusta123 + 456 + 11 +
. Aunque, el programa completo debería ser como0 123 + 456 + 11 + p
(recuerde la notación de sufijo).Entonces, para obtener el programa completo, debemos colocarlo
0
en la pila antes de ejecutar la secuencia desde stdin e imprimir el número superior después de ejecutar (elp
comando al final). Lo logramos a través dedc
opciones:-e0
es solo un atajo-e '0'
que pone0
en la pila,-f-
es para leer y ejecutar comandos desde stdin (el generadofind
aquí),-ep
es para imprimir el resultado (-e 'p'
).Para imprimir el tamaño en MiB como
284.06 MiB
podemos usar-e '2 k 1024 / 1024 / n [ MiB] p'
en el punto 3 (la mayoría de los espacios son opcionales).fuente
Esto puede ayudar:
El comando anterior sumará todos los archivos que salen del tamaño de los directorios.
fuente
-A
debe agregar la opción als
.Utilizar:
Donde <DIR> es el directorio que desea inspeccionar.
El '-c' le da datos totales que se extraen usando la porción 'grep total' del comando, y el recuento en Kbytes se extrae con el comando awk.
La única advertencia aquí es que si tiene un subdirectorio que contiene el texto "total", también se escupirá.
fuente