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 :

REGEX - Parenthèse dans un fichier


Sujet :

Shell et commandes GNU

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 134
    Points : 65
    Points
    65
    Par défaut REGEX - Parenthèse dans un fichier
    Bonjour à tous,

    Je souhaite faire un tri dans mes sauvegardes de photos pour fusionner le tout dans une seule.

    J'utilise photos ( mac os), et quand j'exporte les photos, j'ai des fichiers en doublons, avec divers nommages mais souvent une parenthèse inclus dedans
    Exemple : P4120175 (1).jpeg, IMG_0069 (2).jpeg, la valeur pouvant varier également.

    Le but de la commande est de pouvoir déplacer tous ses fichiers dans un autre dossier. J'ai penser à un début de commande :

    Si quelqu'un peut m'aider , merci d'avance !

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 387
    Points
    19 387
    Par défaut
    Bonjour,

    on ne parcourt pas la sortie de ls, c'est source d'erreur.
    Code bash & GNU findUtils : Sélectionner tout - Visualiser dans une fenêtre à part
    $ find "${repRecherche:-./}" -type f -regex '.*([0-9]\+)\..*'
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 280
    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 280
    Points : 12 729
    Points
    12 729
    Par défaut
    Si c'est sur un seul répertoire, le find n'est pas utile, un simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for i in *\({[0-9],[0-9][0-9]}\).jpg
    do
        ....actions  "$i"....
    done
    Peut suffire si on ne dépasse pas 99 doublons par fichier
    Cordialement.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 387
    Points
    19 387
    Par défaut
    c'est quand même écrit en gros :
    REGEX - parenthèse dans un fichier


    mais, en effet, une regex n'est pas indispensable.
    par contre, pour ne pas descendre dans les sous-répertoires, avec find, on peut ajouter -maxdepth 1
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 280
    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 280
    Points : 12 729
    Points
    12 729
    Par défaut
    ok, via regex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    shopt -s extglob
    for i in *\(+([0-9])\).jpg
    do
      ....action "$i"....
    done
    Cordialement.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 387
    Points
    19 387
    Par défaut
    une REGEX !

    le Développement de chemins (globs) et ses extensions (extglob) ne sont pas des regex.

    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 280
    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 280
    Points : 12 729
    Points
    12 729
    Par défaut
    mouais, les extglob sont considéré comme des regex mais non basé sur un moteur ERE...

    Comme je suis entêté , en regex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for i in *.jpg
    do
       [[ "$i" =~ \([0-9]+\)\.jpg ]] && { ....actions "$i".... ; }
    done
    Cordialement.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 387
    Points
    19 387
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    mouais, les extglob sont considéré comme des regex
    par qui ?

    un point dans une extglob, c'est un point.
    un point dans une regex, c'est un caractère quelconque.
    je ne peux pas dire que c'est "comme".
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  9. #9
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 280
    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 280
    Points : 12 729
    Points
    12 729
    Par défaut
    Le débat risque d'être difficile sur le sujet, dans les faits, tu as raison, les globbing ne sont pas des regex, c'est plutot la regex qui est est un type de globbing si on en croit : https://tldp.org/LDP/GNU-Linux-Tools...tml/x11655.htm.

    PS: prendre le . est un mauvais exemple, car on a le ? qui est sont équivalent dans la globbing
    Cordialement.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 387
    Points
    19 387
    Par défaut
    c'est un peu Néandertal et Sapiens.

    --
    « au début, était le globbing, et la carte mère trouva ça bien, alors elle créa la regex. »
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  11. #11
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 134
    Points : 65
    Points
    65
    Par défaut
    Merci pour votre réponse et sur le débat qui m'a perdu

    J'ai indiqué regex dans le titre , car de mon niveau, cela me semblait le plus pertinent comme méthode, mais je suis preneur d'autre méthode.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 387
    Points
    19 387
    Par défaut
    alors, le Développement des chemins (globbing) est une bonne méthode.

    on peut apporter plus de restrictions dans la liste des fichiers remontés pour la boucle for :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ ext=jpeg
    $ glob="*[0-9]\).$ext"
    $ rgx="([0-9]+)\.j$ext$"
    $ for f in $glob; do [[ $f =~ $rgx ]] && : do what ever with "$f"; done
    nb : $glob n'est pas entre guillemets, parce que il faut que le développement de l'astérisque soit réalisé.
    s'il y avait des espaces, il faudrait les protéger lors de l'assignation.

    et les guillemets sont sont facultatifs entre [[ ]].
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  13. #13
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 134
    Points : 65
    Points
    65
    Par défaut
    @ N_BaH Pour m'éclairé, est pour trouver les valeurs dans les parenthèses.
    Pour je saisi pas trop. Dois je ajouter également [a-Z], pour les lettres du fichier ? et .j équivaut à quoi ?

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 387
    Points
    19 387
    Par défaut
    c'est pour trouver les fichiers qui finissent par un nombre, une parenthèses, un point, puis l'extension indiquée.

    le j est un oubli : j'avais d'abord mis jpeg "en dur".

    il n'est pas indispensable de restreindre la regex à des caractères alphabétiques. c'est à toi de juger s'il peut y avoir des fichiers ne contenant pas que des lettres qui pourraient gêner.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  15. #15
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 134
    Points : 65
    Points
    65
    Par défaut
    Ok merci pour ton retour,

    au final, seul les fichiers avec une parenthèses m'intéresse :-)

    Je vais essayer d'adapter ton code pour ne prendre que ce critère en compte

Discussions similaires

  1. Réponses: 15
    Dernier message: 15/03/2013, 10h21
  2. Supprimer les parenthèses dans un fichier texte
    Par Olivier Regnier dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 16/01/2013, 00h52
  3. [RegEx] Parenthèse dans Regex
    Par Epica84 dans le forum Langage
    Réponses: 5
    Dernier message: 09/02/2011, 10h30
  4. ajouter des parenthèses dans un fichier txt
    Par AZzjeioafh dans le forum Scripts/Batch
    Réponses: 7
    Dernier message: 20/09/2009, 10h24
  5. [RegEx] regex et recherche de texte dans un fichier
    Par minusette dans le forum Langage
    Réponses: 2
    Dernier message: 26/06/2007, 13h25

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