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 08/12/2012, à 06:34

blackdalhia

[Manipulation de fichier] Copie de fichier recursif [resolu]

Bonjour,
Ma bibliothèque de mp3 est constituée d'un dossier Musique ayant l'arborescence classique Artiste/Album dans un répertoire Musique.
J'ai mis dans chaque dossier un fichier "folder.jpg" qui est l'image de la pochette de l'album. (J'ai mis du temps mais c'est fait et c est chouette dans xbmc !)
Le problème est que certains programme utilise non pas "folder.jpg" mais ".folder.jpg" (par exemple xbmc en mode bobliotheque ou Clementine...) roll

je voudrais donc créer un programme qui fait la chose suivante:
- Parcours tous les dossiers contenu dans le dossier Musique de manière récursive:
   - Si le dossier ne contient pas de fichier ".folder.jpg" on regarde si il existe un fichier "folder.jpg"
     - Si c est le cas on copie le fichier "folder.jpg" pour créer ".folder.jpg"

Quel langage est le plus adapte pour créer un script tout simple faisant ce type d actions ?

merci ! smile

Blackdalhia

Dernière modification par blackdalhia (Le 09/12/2012, à 02:28)

Hors ligne

#2 Le 08/12/2012, à 07:15

Hizoka

Re : [Manipulation de fichier] Copie de fichier recursif [resolu]

Salut,
un simple script bash fera l'affaire smile

perso je ferais plutot une recherche sur les fichiers folder.jpg et je regarderai apres si la version .folder existe ou non

# Boucle cherchant les fichiers folder.jpg
while read
do
  # Si le fichier .folder.jpg n'existe pas on le cree
  [[ ! -f "${REPLY%/*}/.folder.jpg" ]] && cp "${REPLY}" "${REPLY%/*}/.folder.jpg"
done < <(find ton_dossier -iname "folder.jpg")

=> J'ai pas testé, avant de l'executer, remplace :

[[ ! -f "${REPLY%/*}/.folder.jpg" ]] && cp "${REPLY}" "${REPLY%/*}/.folder.jpg"

par

[[ ! -f "${REPLY%/*}/.folder.jpg" ]] && echo "le fichier ${REPLY%/*}/.folder.jpg n'existe pas, on pourrait donc copier le fichier ${REPLY}"

Dernière modification par Hizoka (Le 08/12/2012, à 07:15)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#3 Le 08/12/2012, à 07:41

tiramiseb

Re : [Manipulation de fichier] Copie de fichier recursif [resolu]

J'ajouterais qu'un lien symbolique serait plus approprié qu'une copie

Hors ligne

#4 Le 08/12/2012, à 08:07

Hizoka

Re : [Manipulation de fichier] Copie de fichier recursif [resolu]

en effet smile

du coup la ligne :

[[ ! -f "${REPLY%/*}/.folder.jpg" ]] && cp "${REPLY}" "${REPLY%/*}/.folder.jpg"

deviendrait

[[ ! -f "${REPLY%/*}/.folder.jpg" ]] && ln -s "${REPLY}" "${REPLY%/*}/.folder.jpg" 

KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#5 Le 08/12/2012, à 10:20

blackdalhia

Re : [Manipulation de fichier] Copie de fichier recursif [resolu]

Hello
merci pour vos reponses super rapide !

J'ai cree le script d'Hikoza sous le nom addfolder.sh. J'ai cree un repertoir Temp dans lequel j'ai mis le .sh et un repertoire avec quelques dossier tests

# Boucle cherchant les fichiers folder.jpg
while read
do
  # Si le fichier .folder.jpg n'existe pas on le cree
  [[ ! -f "${REPLY%/*}/.folder.jpg" ]] && echo "le fichier ${REPLY%/*}/.folder.jpg n'existe pas ${REPLY}"
done < <(find "/media/Data/tmp/Temp/Test" -iname "folder.jpg")

J'ai lance le script avec

sudo sh addfolder.sh

J obtiens un message d'erreur : "addfolder.sh: 6: addfolder.sh: Syntax error: redirection unexpected"
J‘ai du merdouille au niveau du nom du dossier (j'ai aussi essaye avec "Test" au lieu de l'adresse relative mais ca donne la meme chose ...

Hors ligne

#6 Le 08/12/2012, à 11:32

Postmortem

Re : [Manipulation de fichier] Copie de fichier recursif [resolu]

Salut,
Tu ne devrais pas lancer ta commande avec sudo et sh devant.
Il faut rendre le script exécutable :

chmod 755 /chemin/addfoler.sh

Puis l'exécuter ainsi :

/chemin/addfolder.sh
# ou
cd /chemin
./addfolder.sh

Si tu mets sh devant, le script est exécuté avec sh. Si tu ne mets pas sh, il est exécuté avec ton shell courant, généralement bash. Et le script que Hizoka t'a donné contient de la syntaxe spécifique à bash.
D'ailleurs, pour etre certain que le script s'exécute en bash, rajoute ceci en première ligne :

#!/bin/bash

Pour sudo, il est nécessaire que si tu n'as pas les droits d'écriture sur ton arbo.

Edit :
L'idée d'utiliser les liens symboliques est bonne mais si tes fichiers musicaux sont sur une partition FAT ou NTFS, ça ne fonctionnera pas.

Re-edit :
Et si ton script est sur une partition FAT ou NTFS, tu ne pourras pas le rendre exécutable avec la commande que je t'ai fournie. Il sera exécutable ou non selon les options de montage de la partition. Si tu ne peux pas l'exécuter en l'appelant comme je te l'ai indiqué, il faut l'appeler ainsi :

bash /chemin/addfolder.sh
# ou
cd /chemin
bash addfolder.sh

Dernière modification par Postmortem (Le 08/12/2012, à 11:46)


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#7 Le 08/12/2012, à 13:49

blackdalhia

Re : [Manipulation de fichier] Copie de fichier recursif [resolu]

Super ca marche !! Merci beaucoup !
J ai opte pour la solution de copie car je ne sais pas si les liens symboliques marcheraient sous WIndows.... c est un peu bourrin mais efficace.

Par contre je me heurte a un autre soucis : les image ne sont toujours pas lu en mode bibliotheque sous XBMC... va falloir que je creuse cote XBMC et tag mp3 ....

en tout cas un gros merci a Postmortem et Hizoka !

Hors ligne

#8 Le 08/12/2012, à 18:59

Hizoka

Re : [Manipulation de fichier] Copie de fichier recursif [resolu]

En effet non compatible avec windows smile
tu as bien fait de copier.

en effet mon code était en bash je ne l'ai pas priciser...

apres pour xbmc, je peux pas t'aider...

si c'est resolu, precise le dans ton titre de topic.


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne