Bash : comparer la taille de deux fichiers

Résolu/Fermé
mecdunet Messages postés 113 Date d'inscription samedi 9 juin 2012 Statut Membre Dernière intervention 27 mars 2022 - Modifié le 5 oct. 2019 à 20:57
mecdunet Messages postés 113 Date d'inscription samedi 9 juin 2012 Statut Membre Dernière intervention 27 mars 2022 - 6 oct. 2019 à 19:06
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
A voir également:

1 réponse

jee pee Messages postés 39571 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 15 avril 2024 9 217
Modifié le 5 oct. 2019 à 23:37
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://forums.commentcamarche.net/forum/affich-37620041-recuperer-le-resultat-d-une-commande-dans-une-variable

Cdlt
1
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 406
6 oct. 2019 à 08:14
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…
0
mecdunet Messages postés 113 Date d'inscription samedi 9 juin 2012 Statut Membre Dernière intervention 27 mars 2022 1
Modifié le 6 oct. 2019 à 18:21
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 ? :/
0
jee pee Messages postés 39571 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 15 avril 2024 9 217 > mecdunet Messages postés 113 Date d'inscription samedi 9 juin 2012 Statut Membre Dernière intervention 27 mars 2022
Modifié le 6 oct. 2019 à 18:21
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).
0
mecdunet Messages postés 113 Date d'inscription samedi 9 juin 2012 Statut Membre Dernière intervention 27 mars 2022 1
6 oct. 2019 à 19:06
AHAHAHA Oui effectivement j'ai deux trous à la place des yeux ! Merci x)
0