IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Lister des répertoires numérotés et incrémenter


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2017
    Messages : 3
    Par défaut Lister des répertoires numérotés et incrémenter
    Bonjour à tous,

    je voudrais savoir comment faire pour incrémenter un répertoire de +1
    ex:

    /home/x/rep1/
    /rep2/
    /rep3/
    /rep4/

    et créer automatiquement un rep5 s'il n'existe pas (mais qu'un seul rep5, pas plus).

    +

    dans chaque rep il y a un fichier existant, il faudrait créer le même fichier incrémenté de 1 -> je m'explique :

    /home/x/rep1/fichier1
    /rep2/fichier2
    /rep3/fichier3
    /rep4/fichier4
    /rep5/fichier5 # $rep5 créé par la fonction ci dessus, et $fichier5 créé si rep5 vient d'être créé par la fonction ci dessus.



    Pour la première fonction, j'arrive à faire en sorte de lister les répertoires mais je n'arrive pas à dire à mon script que s'il y a déjà 4 répertoire, d'en créer un cinquième. Je cherche à dissocier les "rep" et le "chiffre" mais je pense faire fausse route.

    Si quelqu'un peut m'aider svpppppp,

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 654
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 654
    Par défaut
    Bonjour,
    j'arrive à faire en sorte de lister les répertoires mais je n'arrive pas à dire à mon script que s'il y a déjà 4 répertoire, d'en créer un cinquième
    mais si le quatrième répertoire est déjà rep5 ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre confirmé Avatar de wh6b.
    Homme Profil pro
    Nicolas Vergnes
    Inscrit en
    Avril 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Nicolas Vergnes
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2017
    Messages : 17
    Par défaut
    Bonjour,
    Si j'ai bien compris il faut detecter le rep le plus élevé et faire un repertoire à +1 avec un fichier de meme valeur ?
    Dans ce cas prenons l'exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $ ls -1d rep*                                                                                                                                                                                                                               
    rep1
    rep10
    rep11
    rep12
    rep13     #<-- c'est lui le plus élevé
    rep02
    rep3
    reppouet333
    rep45superpouet
    On recup les bout de noms des repertoires qui nous interesse (ls et sed ), il ne faudra que des nombres (egrep), on les trie convenablement (sort) , on ne garde que le plus elevé (tail)
    On incrémente puis on crée le repertoire et le fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ last=`ls -1d rep* | sed 's/rep//g' | egrep "^[0-9]+$" | sort -h | tail -1`
    $ new=$((last + 1))
    $ mkdir rep$new
    $ touch rep$new/fichier$new
    On vérifie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ ls -l rep14
    total 0
    -rw-rw-r-- 1 nico nico 0 sept.  9 10:10 fichier14

  4. #4
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 347
    Par défaut
    Bonjour,

    Actuellement, d'après ton dernier exemple, le plus grand répertoire est désormais rep14, si tu crées à la main le répertoire rep015 (le 0 avant le 15 est important) , tu rencontreras un petit souci avec ton script.

    En version built-in bash pour le calcul de l'indice:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    j=0;for i in rep*/; do i=${i:3:-1} ;[[ "$i" =~ [^0-9] ]] || { [ $i -gt $j ] && j=$i ; } ; done
    while [ "${j/#0/}" != "$j" ] ; do t="${j/#0/}" ; done
    new=$((j + 1))
    La boucle while est là pour éviter le problème expliqué au début...

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 345
    Par défaut
    Bonjour,
    Je pense que ça doit aussi le faire comme ça pour l'indice.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var=$(ls -1d rep[0-9]* | sort -V);var=$(("${var##*[^1-9]}"+1));echo $var
    Cordialement.

  6. #6
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 347
    Par défaut
    non, pas aussi simple, essaye avec par exemple rep301, là, on obtient 2.

Discussions similaires

  1. Réponses: 3
    Dernier message: 07/08/2017, 10h38
  2. [sh] Lister des répertoires écrits "en dur" dans des fichiers
    Par melouze dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 02/06/2014, 17h14
  3. [XML] Lister des fichiers dans des répertoires
    Par voxiz dans le forum Bibliothèques et frameworks
    Réponses: 10
    Dernier message: 16/02/2010, 16h25
  4. Lister des Répertoires d'un répertoire source
    Par Freud44 dans le forum C++Builder
    Réponses: 12
    Dernier message: 15/10/2008, 19h21
  5. Lister des fichiers contenus dans un répertoire
    Par mithrendil dans le forum Langage
    Réponses: 5
    Dernier message: 01/05/2007, 09h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo