Bon, je me prends la tête avec une connerie... j'arrive pas à trouver une solution...
j'ai une liste de fichier stocké dans un fichier, genre :
/home/toto/file 1
home/toto/file 2
(il y a bien des espaces dans le nom des fichiers, oh monde ingrat !!! :D)
Je veux juste calculer la taille totale des fichiers. j'y arrive pas...
merci!
# read
Posté par Krunch (site web personnel) . Évalué à 4.
Après, s'il y a des guillemets dans tes noms de fichiers ça devient plus amusant.
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
[^] # Re: read
Posté par Krunch (site web personnel) . Évalué à 4.
$ perl -ne'chomp;$s+=(stat)[7];END{print"$s\n"}' < /tmp/list
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
[^] # Re: read
Posté par 6arts . Évalué à 2.
en continuant à creuser de mon côté, j'ai fait un truc du genre :
list=""
while read line ; do
[ -e "$line" ] && list= ("$line" "${list[@]}")
done < $tmp
echo -e "Total: $(du -hc "${list[@]}"|tail -1)"
[^] # Re: read
Posté par Kerro . Évalué à 2.
Si tu tiens à optimiser, il est possible de passe par la commande xargs.
[^] # Re: read
Posté par 6arts . Évalué à 1.
merci à tous !
[^] # Re: read
Posté par gaaaaaAab . Évalué à 2.
[^] # Re: read
Posté par fabien . Évalué à 1.
a la base pourquoi pas un ptit truc en C, et là, je me suis dit, encore plus simple (donc moins de risque de bug) un ptit script en php !!!
$h=fopen("/tmp/list.txt");
while (($ligne = fgets($h, 4096)) !== false)
{
$total+=filesize($ligne);
}
echo $total;
et voilà, on l'utilise avec php -q fichier.php
j'ai pas testé si les fichiers existent et tout ca... mais c'est assez rapide a ajouter...
tout simplement...
[^] # Re: read
Posté par Krunch (site web personnel) . Évalué à 2.
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
[^] # Re: read
Posté par fabien . Évalué à 1.
et d'un autre coté, cette limite, est bien lisible dans le code (qui lui aussi est bien lisible, sans caracteres particuliers)... et qui plus est est modifiable tres facilement.
par contre pas de prise de tête a savoir s'il y a un espace, un guillemet, un crochet ou autre...
ensuite la ligne perl, a part le fait que ca tient en une seule ligne, bah ok mais du coups c'est moins evident a lire.
apres, je prefere faire KISS.
mais si on veut en plus faire un concours du code le plus petit, c'est une autre question ;)
[^] # Re: read
Posté par barmic . Évalué à 3.
open(FILE,"<toto.txt");
while () {
chomp $_;
$s+=(stat $_)[7];
}
print "$s\n";
C'est compréhenssible du moment que l'on commait le principe de la variable $_.
Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)
[^] # Re: read
Posté par barmic . Évalué à 2.
En langage de script perl est juste fait pour ça autant en profiter.
L'uniligne :
perl -ne 'chomp;$s+=(stat)[7];END{print"$s\n"}' < /tmp/list
c'est
- j'enlève le dernier caractère si c'est un '\n'
- j'ajoute à la variable s le 7ème élément de la liste renvoyée par stat
- à la fin du programme afficher la variable s
Ce qui est génial (mais qu'il faut savoir c'est que la ligne courante (lue dans l'entrée standard est utilisée de manière implicite, on aurait pu écrire :
perl -ne 'chomp $_;$s+=(stat $_)[7];END{print"$s\n"}' < /tmp/list
Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)
[^] # Re: read
Posté par Krunch (site web personnel) . Évalué à 2.
C'est le 8ème élément.
Pour les gens qui veulent décortiquer en détails :
man perlvar
man perlrun
perdoc -f stat
http://perlgolf.sourceforge.net/
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
[^] # Re: read
Posté par 6arts . Évalué à 1.
Ca devrait atterrir bientôt sur le wiki du projet.
Du coup, je reste sur ma solution bash. Mais le perl et le C était en effet des solutions intéressantes.
merci pour votre aide !
lien du projet : http://code.google.com/p/plowshare/
[^] # Re: read
Posté par barmic . Évalué à 3.
$ perl -lnE '$s+=(stat)[7]; END{say "$s"}' < /tmp/list
Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)
[^] # Re: read
Posté par Krunch (site web personnel) . Évalué à 2.
-E commandline
behaves just like -e, except that it implicitly enables all optional features (in the main compilation unit). See feature.
Et je ne trouve aucune section à propos de ces « features ».
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
[^] # Re: read
Posté par barmic . Évalué à 2.
Tu peut avoir des informations en plus là :
http://articles.mongueurs.net/magazines/linuxmag104.html
Pour plus d'information sur feature :
http://perldoc.perl.org/feature.html
Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)
# xargs
Posté par ertuen . Évalué à 6.
[^] # Re: xargs
Posté par Krunch (site web personnel) . Évalué à 2.
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.