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/08/2011, à 20:11

Vortigaunt

Script: déplacement récurif/dossiers

Salut à tous,

Je viens juste de migrer sous 11.04, avec donc banshee comme lecteur audio par défaut.
Et euh, ben il arrive pas à ajouter à la bibliothèque les mp3 sans .mp3, du coup j'ai un bon tiers de ma musique qui n'apparait pas.

Je m'suis donc attelé à un ptit script qui pourrait renommer tout les fichiers mp3 de ma collec.
Sauf que je butte sur le côté "récursif" de la tâche: je m'arrache les cheveux à pondre une boucle capable d'entrer dans un dossier artiste, de vérifier si des mp3 se baladent, puis de rentrer dans le dossier de chaque album pour lancer ça:

function rename
{
for fichier in . ; do
        echo $fichier | grep -v ".mp3" | file --mime-type $fichier | grep audio/mpeg && mv $fichier $fichier.mp3
done
}

(ah, et le lancer au besoin dans le dossier artiste)
Alors ouiouioui mon code est sûrement perfectible, de toutes façons je code comme mes pieds, mais est-ce que quelqu'un aurait une suggestion pour le concept
"effectuer une tâche dans tous les sous-répertoires du répertoire courant"?
Parce que j'ai beau chercher (peut-être les mauvais mots), je trouve pas grand-chose de vraiment concluant...
Merci à vous

Hors ligne

#2 Le 26/08/2011, à 20:37

sputnick

Re : Script: déplacement récurif/dossiers

find /chemin -type f -exec bash -c 'file --mime-type "$1" | grep "audio/mpeg" && mv "$1" "$1.mp3" ' -- {} \;

wink


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#3 Le 26/08/2011, à 20:48

Vortigaunt

Re : Script: déplacement récurif/dossiers

Puissant big_smile
Merci beaucoup.

Mais juste comme ça pour dépanner, personne aurait un bout d'code sous la main pour "effectuer une tâche dans tous les sous-répertoires du répertoire courant"? Même du pseudo-code; c'est quand même un truc souvent utile, et on a pas forcément le temps ou les compétences pour essayer une approche différente comme celle de sputnick..

EDIT: Ça fait quoi le

-- {} \;

d'ailleurs?

Dernière modification par Vortigaunt (Le 26/08/2011, à 20:51)

Hors ligne

#4 Le 26/08/2011, à 20:57

sputnick

Re : Script: déplacement récurif/dossiers

Oui, en bash 4

rename() {
    for fichier; do
        echo "$fichier" | grep -v ".mp3$" | file --mime-type $fichier | grep -q "audio/mpeg" && mv "$fichier" "$fichier.mp3"
    done
}


shopt -s globstar
rename **/*.mp3

On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#5 Le 26/08/2011, à 20:59

sputnick

Re : Script: déplacement récurif/dossiers

Vortigaunt a écrit :

Puissant big_smile
Merci beaucoup.

Mais juste comme ça pour dépanner, personne aurait un bout d'code sous la main pour "effectuer une tâche dans tous les sous-répertoires du répertoire courant"? Même du pseudo-code; c'est quand même un truc souvent utile, et on a pas forcément le temps ou les compétences pour essayer une approche différente comme celle de sputnick..

EDIT: Ça fait quoi le

-- {} \;

d'ailleurs?

"--" c'est la fin des arguments pour éviter de provoquer des bugs si des fichiers commencent avec un "-", fichier représenté par
"{}" donc le nom du fichier de la ligne en cours donné en argument à bash (d'ou le $1 = premier argument)


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#6 Le 29/08/2011, à 01:47

Vortigaunt

Re : Script: déplacement récurif/dossiers

Merci smile

Hors ligne