Bash : comparer la taille de deux fichiers
Résolu
mecdunet
Messages postés
118
Statut
Membre
-
mecdunet Messages postés 118 Statut Membre -
mecdunet Messages postés 118 Statut Membre -
Bonjour,
j'essaie de comparer la taille de deux fichiers, pour cela je pensais utiliser ça :
Malheureusement, j'ai une erreur ./biggest.sh: line 8: [: tmp: integer expression expected;
si je comprends bien tmp et tmp1 ne sont pas des int, pourtant mes commandes ne sont-elles pas censés garder QUE le résultats de wc -c ?
Merci,
j'essaie de comparer la taille de deux fichiers, pour cela je pensais utiliser ça :
if [ -d "dico" ]; then
nom=""
for fichier in dico/*; do
tmp=" wc -c < $fichier "
tmp1=" wc -c $nom | awk '{print $1}' "
if [ tmp -gt tmp1 ] ; then
nom=$fichier
fi
done
fi
Malheureusement, j'ai une erreur ./biggest.sh: line 8: [: tmp: integer expression expected;
si je comprends bien tmp et tmp1 ne sont pas des int, pourtant mes commandes ne sont-elles pas censés garder QUE le résultats de wc -c ?
Merci,
Configuration: Windows / Opera Next 63.0.3368.107
1 réponse
-
Bonjour,
tmp="...."
cela n’exécute pas la commande, la variable contient le texte de la commande,
j'aurais dit qu'il faut utiliser une quote inversée commetmp=`commande `
mais je viens de lire : https://forums.commentcamarche.net/forum/affich-37620041-recuperer-le-resultat-d-une-commande-dans-une-variable
Cdlt
-
Salut jee pee,
Effectivement, les quotes inverses sont obsolètes depuis belle lurette, même si elles font quand même le job.
La syntaxe"$(commande)"
est de plus beaucoup plus lisible que`"commande"`
dans certaines conditions (interprétation visuelle shell, éditeur, navigateur, etc.).
Je rajouterai aussi, qu'une fois une variable déclarée, sa syntaxe pour l'utiliser est de la forme${variable}. Les accolades étant facultatives, mais pas le signe "$" (dollar).$ var="Bonjour"
$ echo "${var}"
Bonjour
À noter que les guillemets autour de la variables sont eux aussi très largement souhaitable, sauf à de rares exceptions, et à condition de savoir ce qu'on fait… -
Aaaah super merci ! Effectivement il le reconnaît maintenant comme une commande,
Bon finalement j'ai :
if [ -d "dico" ]; then nom=dico/a for fichier in dico/*; do tmp=$(wc -c < $fichier) tmp1=$(wc -c < $nom) echo $tmp1 echo $tmp if [ tmp -gt tmp1 ] ; then nom=$fichier fi done fi
les echo me servent à savoir ce que contient tmp et tmp1, or il m'affiche bien des entiers sur la console, pourtant je continue toujours à recevoir l'erreur :
./biggest.sh: line 10: [: tmp: integer expression expected
Comment-cela se fait ? :/ -
-