[script-Bash] ls : argument list too long

Salut à tous,

Dans un de mes répertoire j'ai 3 types de fichiers :
*.gse ;'*.normal et *.normal.PgSg
Mon script fonctionne sous bash mais lorsque je fais ls *.normal j'ai un message d'erreur : argument list too long.
J'ai suivie les conseils trouvé sur CCM et je remplace donc cette commande par : ls *.normal | xargs ls mais ça me renvoie tous les fichiers de mon rep et pas seulement ceux finissant par normal ou plus.
Que faire ??

:) Merçi d'avance !
Configuration: Windows XP
Firefox 2.0.0.4

5 réponses

  1. Modérateur
    Salut,

    T'as essayé avec "find" comme dans l'exemple de la FAQ ?
    0
    1. Salut jipicy,

      Oui j'ai essayé les 2 méthodes et les deux me donnent le même résultats : l'affichage de tous les fichiers présents dans le rep.
      Bon ! d'un autre côté j'ai bêtement réglé le problème en changeant de machine de calcul, du coup ça marche.
      Mais ça reste bizarre. Tiens voilà ce que ça donne :
      condor.plang$ find . -type -f -name \*normal* | xargs ls
      20001229-160121.gse
      20001229-160121.gse.normal
      20001229-160121.gse.normal.PgSg.PS2PnSn.2-15
      20001229-213419.gse
      20001229-213419.gse.normal
      20001229-213419.gse.normal.PgSg.PS2PnSn.2-15
      20001230-150711.gse
      20001230-150711.gse.normal
      20001230-150711.gse.normal.PgSg.PS2PnSn.2-15
      20001231-113509.gse
      20001231-113509.gse.normal
      20001231-113509.gse.normal.PgSg.PS2PnSn.2-15
      20001231-120928.gse
      20001231-120928.gse.normal
      20001231-120928.gse.normal.PgSg.PS2PnSn.2-15

      alors que je voudrais :
      20001229-160121.gse.normal
      20001229-160121.gse.normal.PgSg.PS2PnSn.2-15
      20001229-213419.gse.normal
      20001229-213419.gse.normal.PgSg.PS2PnSn.2-15
      20001230-150711.gse.normal
      20001230-150711.gse.normal.PgSg.PS2PnSn.2-15
      20001231-113509.gse.normal
      20001231-113509.gse.normal.PgSg.PS2PnSn.2-15
      20001231-120928.gse.normal
      20001231-120928.gse.normal.PgSg.PS2PnSn.2-15
      0
    2. Modérateur
      @philSalut,

      essaie comme ça
      find . -type -f -name 'gse.normal.*' | xargs ls

      0
    3. @philRhraa ! Ca ne marche pas, ça donne le même résultat qu'un simple 'ls'.
      0
    4. Modérateur
      @philEt :
      find . -type -f -name 'gse.normal.*' -exec echo {} \;
      :-))
      0
    5. @jipicyCa ne marche pas non plus, mais Dubcek a donné une commande qui fonctionne.
      Ca me rend fou de bloquer sur cette simple commande sachant que le reste de mon script va certainement y passer aussi, hahaha.
      0
  2. Salut,

    j'ai eu un souci comme celui-ci !
    Je l'ai réglé en lançant le script à partir du dossier contenant les fichiers à utiliser !
    Mais je ne suis pas sûr que cela puisse t'aider !

    :-))
    0
    1. Modérateur
      Salut,

      mais tu as utilisé xargs il me semble :-)
      0
    2. oui !
      la première fois ça a très bien marché !
      Ensuite c'est devenu + ou - alléatoire !
      Je sais ce n'est pas normal tu va me dire ! Probablement une erreur de ma part.
      Mais ça m'est arrivé ! De toute façon c'est une commande pour lancer des tests donc l'option script n'était plus nécessaire.
      J'étais sous Darwin X (MacOS) (ce qui devrait pas changer grand chose !).

      :-))
      0
  3. Contributeur
    cette syntaxe :
    find . -type -f -name \*normal* | xargs ls
    est bien étrange. Et celle là:
    find . -type f -name \*normal\* -ls
    0
    1. Modérateur
      Salut,

      perso je préfère les apostrophes simples que les antislashes :-) sauf dans les cas où je n'ai pas le choix bien sûr :-)
      0
    2. Contributeur
      Vaste débat.
      Ne faut-il pas écrire "barre oblique inversée" ou alors backslash ?
      la Commission Générale de Terminologie et de Néologie (CGTN) a du se prononcer !! :-))
      Osons : je suis partisan de l'ampersand & et non de la perluette !!
      j'aime les arcanes des backslashes dans les scripts ...
      0
  4. Alors j'ai tapé cette commande :
    find . -type f -name \*normal\* -ls
    et ça marche. Le seul détail gênant c'est que ça donne aussi les info du fichier, genre : droit en écriture, en lecture, date de modif....Mais ça marche donc c'est plutôt cool ! Merci dubcek :))))
    0
    1. Modérateur
      En fait on devrait dire

      back = en arrière
      slash = oblique

      en arrière oblique

      Il n'y a pas une barre nulle part :-))

      en ce cas je préfère le terme anglais backslash mais je suis sur un site francophne.

      si un jour la commision decidera de l'appéler ZORO alors on va demander à Alain DELON ce qu'il pense mais ça sera mieux de voir aussi où il en est avec l'informatique :-))

      j'aime les arcanes des backslashes dans les scripts

      ça ne me dérange pas non plus, mais je préfère quand mème les apostrophes simples (ou les virgules suspendues ou je ne sais pas quoi ils vont trouver encore CGTN :-)))) quand j'ai quelque chose comme ça

      $var = "\\un\\deux\\trois\\quatre\\cinq\\six\\etc\\";

      et la même chose
      $var = '\un\deux\trois\quatre\cinq\six\etc\';
      0