El dir
comando 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 *.exe
muestra todos los .exe
archivos en el directorio actual, sus tamaños y la suma total de sus tamaños. Me encantaría tener una funcionalidad similar con mi dir
alias 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 ls
argumento que desee dir
y obtener una lista completa más la suma total? Por ejemplo, me gustaría ejecutar dir -R *.jpg *.tif
para 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 -lh
te ayuda? Imprime la suma total en la parte superior. También puede ejecutardu -sh *.exe
para obtener información sobre el uso del espacio en disco en forma legible para humanos.ls -lh
está imprimiendo el 'total' , pero no siempre está relacionado con lo queawk
calculan 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 -lh
no 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 -R
funciona. Es posible que desee jugar con lafind
utilidad para eso.fuente
dir
ya 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:
du
Solo haz:
Según la convención, puede agregar una o más rutas de archivo o directorio al final del comando.
-h
es una extensión para convertir el tamaño a un formato amigable para los humanos,-a
le da el tamaño "aparente" (tamaño del archivo en lugar del uso del disco) y-c
da un total al final.fuente
du
proporciona el uso del disco, no la suma de los tamaños de archivo.du -h
no suma los tamaños de los archivos que se le pasan.du -h *.so
muestra 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.-a
significa--all
. Considere la posibilidad de usar--apparent-size
Puedes usar
du -h -c directory|tail -1
Esto generará una sola línea con uso de memoria.
fuente
du -hs directory
si 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 sizes
y es lo que estoy buscando.fuente