Bash : comparer la taille de deux fichiers [Résolu]

Messages postés
94
Date d'inscription
samedi 9 juin 2012
Statut
Membre
Dernière intervention
7 octobre 2019
-
Bonjour,

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
Afficher la suite 

1 réponse

Meilleure réponse
Messages postés
26849
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
7 octobre 2019
5538
1
Merci
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 comme
tmp=`commande `


mais je viens de lire : https://www.commentcamarche.net/faq/5030-comment-recuperer-le-resultat-d-une-commande-dans-une-variable

Cdlt

Dire « Merci » 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CommentCaMarche

CCM 61268 internautes nous ont dit merci ce mois-ci

zipe31
Messages postés
37095
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
6 octobre 2019
4059 -
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…
mecdunet
Messages postés
94
Date d'inscription
samedi 9 juin 2012
Statut
Membre
Dernière intervention
7 octobre 2019
1 -
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 ? :/
jee pee
Messages postés
26849
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
7 octobre 2019
5538 > mecdunet
Messages postés
94
Date d'inscription
samedi 9 juin 2012
Statut
Membre
Dernière intervention
7 octobre 2019
-
bis : 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).
mecdunet
Messages postés
94
Date d'inscription
samedi 9 juin 2012
Statut
Membre
Dernière intervention
7 octobre 2019
1 -
AHAHAHA Oui effectivement j'ai deux trous à la place des yeux ! Merci x)
Commenter la réponse de jee pee