GNU/Linux >> Tutoriels Linux >  >> Linux

Obtenir la taille totale des fichiers à partir d'un fichier contenant une liste de fichiers

Solution 1 :

Je crois que quelque chose comme ça fonctionnerait dans busybox :

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

Je n'ai pas le même environnement que vous, mais si vous rencontrez des problèmes avec des espaces dans les noms de fichiers, quelque chose comme ça fonctionnerait aussi :

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

Modifier 1 :
@stew est juste dans son message ci-dessous, du montre l'utilisation du disque et non la taille exacte du fichier. Pour changer le comportement, busybox utilise le drapeau -a, alors essayez :du -a "$file" pour la taille de fichier exacte et comparez la sortie/le comportement.

Solution 2 :

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

-c ajoute la ligne "taille totale" ;
tail -1 prend la dernière ligne (avec la taille totale);
cut -f 1 découpe le mot "total".

Solution 3 :

Je ne sais pas si vos outils Linux sont capables de cela, mais :

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

Faites, les xargs définiront le délimiteur comme un caractère de saut de ligne, et du produira un grand total pour vous.

En regardant http://busybox.net/downloads/BusyBox.html, il semble que "busybox du" prendra en charge l'option grand total, mais le "busybox xargs" ne prendra pas en charge les délimiteurs personnalisés.

Encore une fois, je ne suis pas sûr de votre ensemble d'outils.

Solution 4 :

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

Ceci est similaire à la solution de Mattias Ahnberg. L'utilisation de "read" contourne les problèmes avec les noms de fichiers/répertoires avec des espaces. J'utilise stat au lieu de du pour obtenir la taille du fichier. du obtient la quantité d'espace qu'il utilise sur le disque au lieu de la taille du fichier, qui peut être différente. Selon votre système de fichiers, un fichier de 1 octet occupera toujours 4 Ko sur le disque (ou quelle que soit la taille de bloc). Donc, pour un fichier de 1 octet, stat dit 1 octet et du dit 4k.

Solution 5 :

Voici une autre solution au problème :

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

Linux
  1. Comment déplacer 100 fichiers d'un dossier en contenant des milliers ?

  2. Lum - Fusionner des colonnes à partir de deux fichiers distincts ?

  3. Script / Commande pour obtenir Ips à partir de la liste des noms d'hôtes et les combiner en un seul fichier ?

  4. Obtenir la liste de tous les fichiers par masque dans le terminal ?

  5. Obtenir la taille d'un fichier distant à partir du terminal ?

Commande Ls sous Linux (liste des fichiers et des répertoires)

Comment lister tous les fichiers classés par taille sous Linux ?

Un moyen portable d'obtenir la taille du fichier (en octets) dans le shell ?

Itérer sur une liste de fichiers avec des espaces

Exclure la liste des fichiers de la recherche

Comment lister les fichiers récemment supprimés d'un répertoire ?