Dada una lista de archivos files.txt, puedo obtener una lista de sus tamaños de esta manera:
cat files.txt | xargs ls -l | cut -c 23-30que produce algo como esto:
  151552
  319488
 1536000
  225280¿Cómo puedo obtener el total de todos esos números?

alias sum="paste -sd+ - | bc"agregado a la finalización del shell, gracias amigo. . .| x=$(echo <(cat)); echo $((0+${x// /+}+0))si quieres toda la fiesta todo el tiempo:/usr/bin/sumbcno está disponible en algunos sistemas!awk, por otro lado, es (creo) necesario para el cumplimiento de POSIX.Aquí va
fuente
cut? Eso es un número de columna predecible, por lo que su uso... | xargs ls -l | awk '{total = total + $5}{END{print total}'total+=$1lugar detotal = total + $1En lugar de usar cut para obtener el tamaño del archivo de la salida de ls -l , puede usar directamente:
Awk interpreta "$ 5" como la quinta columna. Esta es la columna de ls -l que le da el tamaño del archivo.
fuente
cat no funcionará si hay espacios en los nombres de archivo. aquí hay un perl one-liner en su lugar.
fuente
O si solo desea sumar los números, ingrese:
fuente
... | python -c'import sys; print(sum(int(x) for x in sys.stdin))'cuando Python 2 desaparece a finales de este año.TMTWWTDI : Perl tiene un operador de tamaño de archivo (-s)
fuente
Todo ls -l y luego cut es bastante complicado cuando tienes stat . También es vulnerable al formato exacto de ls -l (no funcionó hasta que cambié los números de columna para cortar )
Además, reparó el uso inútil del gato .
fuente
<infile commandes lo mismo que (y en un orden mejor que)command <infile.si no tiene instalado bc, intente
en vez de
$( )<- devuelve el valor de ejecutar el comando$(( 1+2 ))<- devuelve los resultados evaluadosecho<- repítelo en la pantallafuente
Puede usar el siguiente script si solo desea usar scripts de shell sin awk u otros intérpretes:
fuente
Yo usaría "du" en su lugar.
Si solo quieres el número:
fuente
files.txtsea grande. Si el número de argumentos canalizadosxargsalcanza cierto umbral, los divide en varias llamadas adu. El total que se muestra al final es el total de la última llamadadu, no la lista completa.En ksh:
fuente
cut, pero se ignora awks capacidad de hacer los cálculos ...Pipe to gawk:
fuente
Aquí está el mío
fuente
fuente
Me gusta usar ....
mostrarán la suma de cada línea ...
aplicando sobre esta situación:
Total es el último valor ...
fuente
Puede usar el awk para hacer lo mismo, incluso omite los no enteros
o puede usar el comando ls y calcular la salida legible por humanos
fuente
awk '{ total += $1} END {print total}' files.txtes más rápidoEn mi opinión, la solución más simple para esto es el comando "expr" unix:
fuente
Puro golpe
fuente
O podrías simplemente sumarlos mientras lees los tamaños
Si no te importan los tamaños de mordida y los bloques está bien, entonces solo
fuente
Si tiene R, puede usar:
Como me siento cómodo con R, en realidad tengo varios alias para cosas como esta, así que puedo usarlos
bashsin tener que recordar esta sintaxis. Por ejemplo:que me deja hacer
Inspiración: ¿Hay alguna manera de obtener el mínimo, el máximo, la mediana y el promedio de una lista de números en un solo comando?
fuente