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 :

[bash] conversion de fichiers avec exclusion


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut [bash] conversion de fichiers avec exclusion
    Bonjour,

    Je cherche à convertir tous les fichiers .wav d'une arborescence en excluant un répertoire en .flac et ce en bash et en une ligne.

    J'en suis là :

    J'arrive à obtenir tous les fichiers cibles avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find -type f -name "*.wav" | grep -v "/Rep_a_exclure"
    J'arrive à convertir des fichiers du repertoire courant avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pacpl --to flac --only wav *.wav
    ou un seul :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pacpl --to flac le_fichier.wav
    Mais je n'arrive pas à lier les deux avec un systeme de pipe, pour aboutir à une seule ligne élégante et gracieuse.

    Au cours de mes recherches j'ai constaté que ma version de find ne dispose pas de l'option --exclude-path (ou un truc du genre).
    J'ai constaté également que je ne maitrise pas du tout l'utilisation de l'option -exec de find dans laquelle je place pourtant de grands espoirs.

    Merci de votre aide

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 657
    Par défaut
    Oui. -exec c'est bien.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     find -type f -name '*.wav' -exec pacpl --to flac {} +
    La commande après -exec prend en argument chaque fichier trouvé par find l'un après l'autre
    ...
    ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    Merci de ta réponse.

    J'ai finalement trouvé ceci (qui marche):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find -path './Rep_a_exclure' -prune -o -type f -name "*.wav" -print -exec pacpl --to flac {} \;
    Je ne comprend pas à quoi sert le paramètre -o mais je sens que ça va venir.

  4. #4
    Rédacteur
    Avatar de lavazavio
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 673
    Par défaut
    La manpage de find explique cela :
    -path motif
    Fichier dont le nom complet correspond au motif fourni. Lors du développement des méta-caractères, `/' et `.' ne sont pas traités différemment des autres caractères, ainsi par exemple :
    find . -path './sr*sc'
    affichera l'élément de répertoire intitulé './src/misc' (s'il en existe un). Pour ignorer une arborescence complète de répertoires, utilisez l'option -prune plutôt que de vérifier chaque fichier de l'arbre. Par exemple, pour ignorer le répertoire `src/emacs' et tous ses sous-répertoires, tout en affichant le nom de tous les autres fichiers, faites quelque chose comme :
    find . -path './src/emacs' -prune -o -print
    Rédacteur et Modérateur rubriques Linux et Virtualisation
    Mes Articles
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux
    N'oubliez pas de consulter les FAQ virtualisation et les cours et tutoriels Virtualisation
    Man pages en français

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 296
    Par défaut
    l'option -o de find est un ou logique, le et logique est -a mais find le "comprend" de manière implicite .

  6. #6
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    Ok, donc si j'ai bien compris on pourrait écrire de manière plus explicite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find -path './Rep_a_exclure' -prune -o -type f -a -name "*.wav"  -a -print -a -exec pacpl --to flac {} \;
    Au passage, je viens de me rendre compte que l'option -print ne sert à rien dans ce cas vu que pacpl affiche le nom du fichier qu'il convertit. Par ailleurs, au cours de mes pérégrinations, je me suis rendu compte que le format ape offre une bien meilleur compression que flac (11% pour les taux de compression maximum). Mais ce n'est pas un problème, car grace à ma récente maitrise de find et de pacpl, je sais qu'un simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find -path './Rep_a_exclure' -prune -o -type f -name "*.flac" -exec pacpl --to ape --acomp 5000 --delete {} \;
    suffit!

    Merci encore pour vos conseils

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. modifier un fichier avec bash
    Par alaninho dans le forum Linux
    Réponses: 5
    Dernier message: 04/06/2012, 11h50
  2. BASH: copie de fichiers en fonction d'un motif en récursif, et avec écrasement
    Par Oursdeglace dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 24/06/2011, 11h46
  3. Réponses: 8
    Dernier message: 15/01/2010, 16h03
  4. Réponses: 1
    Dernier message: 16/03/2009, 22h30
  5. Conversion de fichiers avec graphiques *.dvi *.ps
    Par olivier Perrot dans le forum Applications et environnements graphiques
    Réponses: 1
    Dernier message: 18/11/2007, 14h47

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