Page 1 sur 2
Traiter des fichiers dans des sous-dossiers
Posté : lun. 11 mars 2019 09:56
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.
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.
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.
Re: Traiter des fichiers dans des sous-dossiers
Posté : lun. 11 mars 2019 10:16
par Nerva
A part la seconde ligne qui deviendrait (pour WAV -> FLAC) :
Je n'ai pas compris grand-chose !

Récursif ? Non récursif ? Faut créer des fichiers batch ?
Re: Traiter des fichiers dans des sous-dossiers
Posté : lun. 11 mars 2019 10:34
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ù ?
Re: Traiter des fichiers dans des sous-dossiers
Posté : lun. 11 mars 2019 10:40
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.
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) :
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) :
(le tilde ~ est une abréviation pour «/home/TON_USER»)
[EDIT] oups grillé par
cyrille 
Re: Traiter des fichiers dans des sous-dossiers
Posté : lun. 11 mars 2019 11:05
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:
Re: Traiter des fichiers dans des sous-dossiers
Posté : lun. 11 mars 2019 11:13
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
}
Re: Traiter des fichiers dans des sous-dossiers
Posté : lun. 11 mars 2019 11:29
par Nerva
J'ajoute cette ligne à la fin du fichier ? Même retour.
Re: Traiter des fichiers dans des sous-dossiers
Posté : lun. 11 mars 2019 11:37
par Nerva
Code : Tout sélectionner
/bin/sh^M : mauvais interpréteur: Aucun fichier ou dossier de ce type
Re: Traiter des fichiers dans des sous-dossiers
Posté : lun. 11 mars 2019 11:48
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
Re: Traiter des fichiers dans des sous-dossiers
Posté : lun. 11 mars 2019 11:56
par Nerva
Fichier test.sh créé avec EditPadPro sous Wine.