Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 26/05/2017, à 00: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, à 15:34)

Hors ligne

#2 Le 26/05/2017, à 00: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.

Hors ligne

#3 Le 26/05/2017, à 09: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, à 09:43)

Hors ligne

#4 Le 26/05/2017, à 12: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, à 15:17)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#5 Le 26/05/2017, à 14: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, à 15: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.

Hors ligne

#7 Le 26/05/2017, à 15: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