J'ai un fichier contenant une liste de fichiers dont j'aimerais connaître la taille totale des fichiers. Existe-t-il une commande pour le faire?
Mon OS est un linux très basique (Qnap TS-410).
ÉDITER:
Quelques lignes du fichier:
/ share / archive / Test Bailey / BD006 / 0.tga
/ share / archive / Bailey / BD007 / 1 version 1.tga
/ share / archive / Bailey 2 / BD007 / example.tga
Réponses:
Je crois que quelque chose comme ça fonctionnerait dans busybox:
Je n'ai pas le même environnement que vous, mais si vous rencontrez des problèmes avec les espaces dans les noms de fichiers, quelque chose comme ça fonctionnerait aussi:
Edit 1 :
@stew est juste dans son article ci-dessous, du montre l'utilisation du disque et non la taille exacte du fichier. Pour changer le comportement, busybox utilise l'indicateur -a, alors essayez:
du -a "$file"
pour une taille de fichier exacte et comparez la sortie / le comportement.la source
/usr/bin/du: Argument list too long
(près de 80 000 lignes dans mon fichier). Votre deuxième commande me donne juste une invite une fois que j'appuie sur Entrée, en attendant quelque chose de plus?cat tgafiles.txt | while read file;do du "$file" done | awk '{i+=$1} END {print i}'
. merci mattiascat tgafiles.txt | while read file;do du "$file";done | awk '{i+=$1} END {print i}'
(c'est à dire avant de faire).-c
ajoute la ligne "taille totale";tail -1
prend la dernière ligne (avec la taille totale);cut -f 1
supprime le mot «total».la source
Je ne sais pas si vos outils Linux sont capables de cela, mais:
Faites, les xargs définiront le délimiteur comme un caractère de nouvelle ligne, et du produira un grand total pour vous.
En regardant http://busybox.net/downloads/BusyBox.html, il semble que "busybox du" supporte l'option grand total, mais les "xboxs busybox" ne prennent pas en charge les délimiteurs personnalisés.
Encore une fois, je ne suis pas sûr de votre ensemble d'outils.
la source
xargs: invalid option -- d
-c
car xargs fera plusieurs appels àdu
si la liste de fichiers est suffisamment longue, produisant plusieursdu
totaux.Ceci est similaire à la solution de Mattias Ahnberg. L'utilisation de "read" résout les problèmes de noms de fichiers / répertoires avec des espaces. J'utilise
stat
au lieu dedu
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 4k sur le disque (ou quelle que soit la taille de bloc). Donc, pour un fichier de 1 octet, stat indique 1 octet et du dit 4k.la source
stat
commande:stat: command not found
stat: applet not found
dans ce casVoici une autre solution au problème:
la source
du -bc
tourne beaucoup plus vite.Essayez quelque chose comme ceci:
Pour gérer correctement les espaces dans les chemins:
la source
find
?find
lieu du vraifind
binaire.cat docs.txt | xargs -d \\n du -sk | awk '{total+=$1} END{print total}'
la source