Bash : comparer la taille de deux fichiers

Résolu
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 :

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

  1. jee pee Messages postés 31890 Date d'inscription   Statut Modérateur Dernière intervention   9 984
     
    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
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      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
    2. mecdunet Messages postés 118 Statut Membre 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 ? :/
      0
      1. jee pee Messages postés 31890 Date d'inscription   Statut Modérateur Dernière intervention   9 984 > mecdunet Messages postés 118 Statut Membre
         
        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
    3. mecdunet Messages postés 118 Statut Membre 1
       
      AHAHAHA Oui effectivement j'ai deux trous à la place des yeux ! Merci x)
      0