Résolu le 13-03-19 Traiter des fichiers dans des sous-dossiers

Avatar du membre
Nerva
Messages : 478
Enregistré le : lun. 4 mars 2019 18:48

Traiter des fichiers dans des sous-dossiers

Message par Nerva »

Salut.

N'étant pas du tout familier du terminal, je bute sur un truc qui va certainement vous paraître rudimentaire, mais tant pis, je n'ai pas trouvé de réponse sur le Net. :mrgreen:

J'utilise Flac (conversion audio) et Python-rgain (calcul du replay-gain) en ligne de commande. J'ai un dossier Audio/Conversion où je place mes fichiers WAV à convertir. La commande :
flac -7 --replay-gain *.wav
-7 étant le taux de compression

1) Comment faire pour qu'une fois la console lancée je puisse exécuter la commande directement sans me rendre préalablement dans Audio/Conversion ? J'ai essayé naïvement ça :
flac -7 --replay-gain Audio/Conversion *.wav
Mais c'est pas bon. :D

2) A supposer que je dispose d'un dossier global qui contient tous les WAV, par exemple, Audio/Albums/Nom_de_l'artiste/Nom_de_l'album, comment faire pour traiter tous les fichiers d'un seul coup ?

3) Tant que j'y suis, comment créer un lanceur qui exécute une commande précise de terminal ?

Je vous remercie.
Linux Mint 22.3 Zena | Mate
Avatar du membre
Nerva
Messages : 478
Enregistré le : lun. 4 mars 2019 18:48

Re: Traiter des fichiers dans des sous-dossiers

Message par Nerva »

A part la seconde ligne qui deviendrait (pour WAV -> FLAC) :

Code : Tout sélectionner

for i in *.wav; do flac -7 "${i}" "${i%.wav}.flac"; done
Je n'ai pas compris grand-chose ! :oops: Récursif ? Non récursif ? Faut créer des fichiers batch ?
Linux Mint 22.3 Zena | Mate
Avatar du membre
Nerva
Messages : 478
Enregistré le : lun. 4 mars 2019 18:48

Re: Traiter des fichiers dans des sous-dossiers

Message par Nerva »

Alors :

Code : Tout sélectionner

#!/bin/sh

dossierDeTravail="/home/nerva/Audio/Conversion";

recursiveSearch() {
    [ -r "$1" ] && [ -x "$1" ] || return 1 # Si on peut fouiller dans le dossier
    [ "`ls "$1" | wc -l`" == "0" ] && return 0 # Si le dossier est vide
    for file in "$1"/*; do
        if [ -d "$file" ]; then
            recursiveSearch "$file"
        fi
        echo "$file" for i in *.wav; do flac -7 "${i}" "${i%.wav}.flac"; done
    done
}

recursiveSearch  $dossierDeTravail
Ce fichier test.sh, je l'enregistre où ?
Linux Mint 22.3 Zena | Mate
Avatar du membre
arghlub
Administrateur du site
Messages : 11560
Enregistré le : dim. 21 mai 2017 08:19
Localisation : Provence

Re: Traiter des fichiers dans des sous-dossiers

Message par arghlub »

Salut,
Nerva a écrit : lun. 11 mars 2019 09:56 1) Comment faire pour qu'une fois la console lancée je puisse exécuter la commande directement sans me rendre préalablement dans Audio/Conversion ? J'ai essayé naïvement ça :
flac -7 --replay-gain Audio/Conversion *.wav
Mais c'est pas bon. :D
Tu as fait une erreur en saisissant le chemin vers les fichiers .wav (un / manquant et un espace en trop)
Je suppose que ton répertoire Audio/Conversion est dans ton /home.
Il faut saisir cette commande (en étant dans ton /home) :

Code : Tout sélectionner

flac -7 --replay-gain Audio/Conversion/*.wav
Ou mieux, tu mets le chemin absolu (pas en chemin relatif) pour pouvoir l'exécuter de n'importe où (et donc créer un lanceur facilement) :

Code : Tout sélectionner

flac -7 --replay-gain ~/Audio/Conversion/*.wav
(le tilde ~ est une abréviation pour «/home/TON_USER»)


[EDIT] oups grillé par cyrille ;)
Tour1 (custom) CPU Intel I7-7700K | CG Nvidia GTX 1080 | RAM 16Go | tripleBoot : LMint 22.3 | Debian 12 | MX Linux | XFCE
Tour2 (custom) CPU AMD Athlon 5200+ | CG Nvidia GTX 560 | RAM 6Go | FreeBSD XFCE
Portable1 MSI GF75 Thin 9SC | CPU Intel I7-9750H | CG Nvidia GTX 1650 | RAM 32Go | dualBoot : LMint 22.1 | MX Linux | XFCE
Portable2 MacBook Air A1466 | CPU Intel I5-5250U | CG Intel HD Graphics 6000 | RAM 8Go | dualBoot : macOS Sierra | MX Linux XFCE
─────( pour une informatique libre ! )─────
Avatar du membre
Nerva
Messages : 478
Enregistré le : lun. 4 mars 2019 18:48

Re: Traiter des fichiers dans des sous-dossiers

Message par Nerva »

arghlub a écrit : lun. 11 mars 2019 10:40Ou mieux, tu mets le chemin absolu (pas en chemin relatif) pour pouvoir l'exécuter de n'importe où (et donc créer un lanceur facilement)
Merci, c'est déjà ça de fait. ;)

----------------

La commande sh test.sh me retourne :

Code : Tout sélectionner

: not foundt.sh: 2: test.sh: 
: not foundt.sh: 3: test.sh: 
: not foundt.sh: 4: test.sh:
Linux Mint 22.3 Zena | Mate
Avatar du membre
Nerva
Messages : 478
Enregistré le : lun. 4 mars 2019 18:48

Re: Traiter des fichiers dans des sous-dossiers

Message par Nerva »

Retour :

Code : Tout sélectionner

#!/bin/sh

dossierDeTravail="/home/nerva/Audio/Conversion";

recursiveSearch() {
    [ -r "$1" ] && [ -x "$1" ] || return 1 # Si on peut fouiller dans le dossier
    [ "`ls "$1" | wc -l`" == "0" ] && return 0 # Si le dossier est vide
    for file in "$1"/*; do
        if [ -d "$file" ]; then
            recursiveSearch "$file"
        fi
        echo "$file"
    done
}
Linux Mint 22.3 Zena | Mate
Avatar du membre
Nerva
Messages : 478
Enregistré le : lun. 4 mars 2019 18:48

Re: Traiter des fichiers dans des sous-dossiers

Message par Nerva »

J'ajoute cette ligne à la fin du fichier ? Même retour.
Linux Mint 22.3 Zena | Mate
Avatar du membre
Nerva
Messages : 478
Enregistré le : lun. 4 mars 2019 18:48

Re: Traiter des fichiers dans des sous-dossiers

Message par Nerva »

:cry:

Code : Tout sélectionner

/bin/sh^M : mauvais interpréteur: Aucun fichier ou dossier de ce type
Linux Mint 22.3 Zena | Mate
Avatar du membre
Nerva
Messages : 478
Enregistré le : lun. 4 mars 2019 18:48

Re: Traiter des fichiers dans des sous-dossiers

Message par Nerva »

Pour l'instant je n'ai rien modifié :

Code : Tout sélectionner

#!/bin/sh

dossierDeTravail="/home/nerva/Audio/Conversion";

recursiveSearch() {
    [ -r "$1" ] && [ -x "$1" ] || return 1 # Si on peut fouiller dans le dossier
    [ "`ls "$1" | wc -l`" == "0" ] && return 0 # Si le dossier est vide
    for file in "$1"/*; do
        if [ -d "$file" ]; then
            recursiveSearch "$file"
        fi
        echo "$file"
    done
}

recursiveSearch  $dossierDeTravail
Linux Mint 22.3 Zena | Mate
Avatar du membre
Nerva
Messages : 478
Enregistré le : lun. 4 mars 2019 18:48

Re: Traiter des fichiers dans des sous-dossiers

Message par Nerva »

Fichier test.sh créé avec EditPadPro sous Wine.
Linux Mint 22.3 Zena | Mate
Répondre