GNU/Linux >> Tutoriales Linux >  >> Linux

Obtenga el tamaño total de los archivos de un archivo que contiene una lista de archivos

Solución 1:

Creo que algo como esto funcionaría en busybox:

du `cat filelist.txt` | awk '{i+=$1} END {print i}'

No tengo el mismo entorno que usted, pero si tiene problemas con los espacios en los nombres de archivo, algo como esto también funcionaría:

cat filelist.txt | while read file;do
  du "$file"
done | awk '{i+=$1} END {print i}'

Editar 1 :
@stew tiene razón en su publicación a continuación, du muestra el uso del disco y no el tamaño de archivo exacto. Para cambiar el comportamiento, busybox usa el indicador -a, así que intente:du -a "$file" para el tamaño de archivo exacto y compare la salida/comportamiento.

Solución 2:

du -c `cat filelist.txt` | tail -1 | cut -f 1

-c agrega la línea "tamaño total";
tail -1 toma la última línea (con el tamaño total);
cut -f 1 corta la palabra "total".

Solución 3:

No sé si sus herramientas de Linux son capaces de esto, pero:

cat /tmp/filelist.txt  |xargs -d \\n du -c

Do, los xargs configurarán el delimitador para que sea un carácter de nueva línea y du generará un total general para usted.

Al mirar http://busybox.net/downloads/BusyBox.html, parece que "busybox du" admitirá la opción total general, pero "busybox xargs" no admitirá delimitadores personalizados.

Nuevamente, no estoy seguro de su conjunto de herramientas.

Solución 4:

while read filename ;  do stat -c '%s' $filename ; done < filelist.txt | awk '{total+=$1} END {print total}'

Esto es similar a la solución de Mattias Ahnberg. El uso de "leer" soluciona los problemas con los nombres de archivo/directorios con espacios. Yo uso stat en lugar de du para obtener el tamaño del archivo. du está obteniendo la cantidad de espacio que está usando en el disco en lugar del tamaño del archivo, que podría ser diferente. Dependiendo de su sistema de archivos, un archivo de 1 byte aún ocupará 4k en el disco (o cualquiera que sea el tamaño del bloque). Entonces, para un archivo de 1 byte, stat dice 1 byte y du dice 4k.

Solución 5:

Aquí hay otra solución al problema:

cat filelist.txt | tr '\n' '\0' | wc -c --files0-from=-

Linux
  1. ¿Manera portátil de obtener el tamaño del archivo (en bytes) en Shell?

  2. Cómo distinguir binarios de archivos de texto en Linux

  3. Iterar sobre una lista de archivos con espacios

  4. ¿Cómo enumerar los archivos eliminados recientemente de un directorio?

  5. ¿Cómo obtener elementos de la lista en bash?

Comando Ls en Linux (Lista de archivos y directorios)

¿Script/comando para obtener IPs de la lista de nombres de host y combinarlos en un solo archivo?

¿Cómo enumerar todos los archivos ordenados por tamaño en Linux?

Cómo obtener el tamaño de tar.gz en un archivo (MB) en python

Encuentre el tamaño total de archivos no confirmados o sin seguimiento en git

Excluir la lista de archivos de la búsqueda