El dircomando de listado de directorio de Windows tiene una línea al final que muestra la cantidad total de espacio ocupado por los archivos enumerados. Por ejemplo, dir *.exemuestra todos los .exearchivos en el directorio actual, sus tamaños y la suma total de sus tamaños. Me encantaría tener una funcionalidad similar con mi diralias en bash, pero no estoy seguro de cómo hacerlo.
Actualmente, tengo alias dir='ls -FaGl'en mi .bash_profile, mostrando
drwxr-x---+ 24 mattdmo 4096 Mar 14 16:35 ./
drwxr-x--x. 256 root 12288 Apr 8 21:29 ../
-rw------- 1 mattdmo 13795 Apr 4 17:52 .bash_history
-rw-r--r-- 1 mattdmo 18 May 10 2012 .bash_logout
-rw-r--r-- 1 mattdmo 395 Dec 9 17:33 .bash_profile
-rw-r--r-- 1 mattdmo 176 May 10 2012 .bash_profile~
-rw-r--r-- 1 mattdmo 411 Dec 9 17:33 .bashrc
-rw-r--r-- 1 mattdmo 124 May 10 2012 .bashrc~
drwx------ 2 mattdmo 4096 Mar 24 20:03 bin/
drwxrwxr-x 2 mattdmo 4096 Mar 11 16:29 download/
por ejemplo. Tomando las respuestas de esta pregunta :
dir | awk '{ total += $4 }; END { print total }'
lo que me da el total, pero no imprime el listado del directorio en sí. ¿Hay alguna manera de alterar esto en una línea de comandos o script de shell para que pueda pasar cualquier lsargumento que desee diry obtener una lista completa más la suma total? Por ejemplo, me gustaría ejecutar dir -R *.jpg *.tifpara obtener la lista y el tamaño total de esos tipos de archivos en todos los subdirectorios. Idealmente, sería genial si pudiera obtener el tamaño de cada subdirectorio, pero esto no es esencial.
fuente

ls -lhte ayuda? Imprime la suma total en la parte superior. También puede ejecutardu -sh *.exepara obtener información sobre el uso del espacio en disco en forma legible para humanos.ls -lhestá imprimiendo el 'total' , pero no siempre está relacionado con lo queawkcalculan los siguientes scripts o lo que sumo a mano. A veces está cerca del número de KB de archivos en el directorio, pero no parece tener vigencia los tamaños asignados de subdirectorios. Le agradecería que me indicara una explicación de qué es exactamente ese número ...ls -lhno muestra el tamaño total de un directorio calculando su contenidoRespuestas:
La siguiente función hace la mayor parte de lo que está pidiendo:
... pero no te dará lo que estás pidiendo
dir -R *.jpg *.tif, porque no es así comols -Rfunciona. Es posible que desee jugar con lafindutilidad para eso.fuente
dirya es el nombre de un núcleo de GNU popular, prefiero no nombrar una función como esa.Ya hay un comando UNIX para esto:
duSolo haz:
Según la convención, puede agregar una o más rutas de archivo o directorio al final del comando.
-hes una extensión para convertir el tamaño a un formato amigable para los humanos,-ale da el tamaño "aparente" (tamaño del archivo en lugar del uso del disco) y-cda un total al final.fuente
duproporciona el uso del disco, no la suma de los tamaños de archivo.du -hno suma los tamaños de los archivos que se le pasan.du -h *.somuestra el tamaño de cada archivo, pero no la suma. Creo que lo que quieres aquí esdu -hc *.so(o inclusodu -hc *.so | tail -1). Pero, por supuesto, él también quiere el listado del directorio.-asignifica--all. Considere la posibilidad de usar--apparent-sizePuedes usar
du -h -c directory|tail -1Esto generará una sola línea con uso de memoria.
fuente
du -hs directorysi solo quieres el total.Simplemente imprima la línea actual que está sumando el total de:
fuente
con perl:
Tamaño de todos los archivos PDF no ocultos en el directorio actual.
fuente
Agregar lo siguiente a .bash_profile o .bashrc funciona para mí.
Ahora cuando hago un dir * .mp3 lo hace recursivamente e imprime el total al final. Puede controlar la profundidad que desea agregando un parámetro maxdepth al hallazgo. Sé que ejecutar find dos veces no es una idea muy eficiente. Pero no podría pensar en una mejor manera. Al menos hace el trabajo.
fuente
Usar du y una declaración awk como la mencionada anteriormente le proporcionará lo que está buscando.
Ejemplo:
du /home/abc/Downloads/*.jpg | awk '{ print; total += $1 }; END { print "total size: ",total }'Esto mostrará una lista de todos los archivos en la carpeta Descargas del usuario abc que termina en .jpg e imprime la suma de todos estos archivos al final de la lista.
fuente
Para obtener ambos, la salida del directorio y el cálculo del tamaño, sin usar ninguna de las otras opciones propuestas, puede usar tee (1) y la sustitución del proceso ...
fuente
tee, solodir | awk '{print; total += $4}; END {print total}'fuente
linux sum human readable sizesy es lo que estoy buscando.fuente