#1 Le 25/05/2017, à 23:27
- lildadou
[Résolu] [find] Execution dossier par dossier
Bonsoir,
je cherche un réaliser un script pour nettoyer ma bibliothèque de fichiers FLAC.
Ce script doit dans un premier temps virer les headers non désirés (padding, application et vignette) puis calculer le replay gain de chaque album et ajouter un padding.
Ma bibliothèque est rangée par $artist/$album/
Pour la première étape, je fais:
find . -name *.flac -exec metaflac --dont-use-padding --remove --block-type=PADDING,APPLICATION,PICTURE "{}" \;
Je n'arrive pas à automatiser la seconde étape car il faut passer tous les fichiers de l'album lors d'un appel à metaflac. A la main, je profite de l'expansion comme ceci:
metaflac --add-replay-gain --add-padding=2044 $album/$artist/*.flac
Comment faire?
Dernière modification par lildadou (Le 26/05/2017, à 14:34)
Hors ligne
#2 Le 25/05/2017, à 23:46
- Watael
Re : [Résolu] [find] Execution dossier par dossier
salut,
des boucles for imbriquées, pour itérer sur chaque album de chaque artiste ?
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#3 Le 26/05/2017, à 08:43
- lildadou
Re : [Résolu] [find] Execution dossier par dossier
Merci pour ta participation.
Je n'arrive pas à faire d'expansion dans un for. Cet exemple ne fonctionnera pas:
for album in ./*/*
do
metaflac --add-replay-gain --add-padding=2044 "$album/*.flac"
done
Je me suis dis que l'expansion ne fonctionnait pas à cause des double-quotes mais cet exemple ne fonctionne pas non plus:
for album in ./*/*
do
metaflac --add-replay-gain --add-padding=2044 $(printf %q "$album")/*.flac
done
Je me suis résigné à faire ce truc tout pas beau:
for album in ./*/*
do
echo "Process $album"
cd "$album"
metaflac --add-replay-gain --add-padding=2044 *.flac
cd ../..
done
Dernière modification par lildadou (Le 26/05/2017, à 08:43)
Hors ligne
#4 Le 26/05/2017, à 11:14
- Watael
Re : [Résolu] [find] Execution dossier par dossier
« ça marche pas » n'est pas une description de ce qui se passe, ou pas; c'est un triste constat.
quand je disais boucles imbriquées, je pensais :
for artist in ./*/ #le / final permet de ne traiter que les répertoires
do
for album in "$artist"*/ #il n'y a pas de `/' intercalé avec l'astérisque, car il est déjà à la fin de "$artist"
do
metaflac --add-replay-gain --add-padding=2044 "$album"*.flac #idem
done
done
Dernière modification par Watael (Le 26/05/2017, à 14:17)
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#5 Le 26/05/2017, à 13:52
- lildadou
Re : [Résolu] [find] Execution dossier par dossier
Désolé.
Quand je dis que ça ne fonctionne pas, cela signifie qu'il n'y a pas eu d'expansion et que metaflac s'attend à trouver un fichier nommé "*.flac", qu'il ne trouve bien évidement pas et que du coup, il ne fait rien (ce qui n'est pas ce je voulais).
Ton script semble fon... euh... "$album"*.flac semble bien subir une expansion. Je ne comprends pas pourquoi "$album"*.flac provoque une expansion et pas "$album/*.flac".
Je vais étudier la chose. Merci, j'ai appris plus que ce que j'attendais!
Hors ligne
#6 Le 26/05/2017, à 14:15
- Watael
Re : [Résolu] [find] Execution dossier par dossier
* n'est pas/jamais développé entre guillemets.
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#7 Le 26/05/2017, à 14:33
- lildadou
Re : [Résolu] [find] Execution dossier par dossier
Ah... c'est tellement évident que je suis complètement passé à coté.
Merci encore!
Hors ligne