#1 Le 20/12/2009, à 01:56
- al_boon
remplacement de text dans un nfo suivant le résultat de find
bonsoir (oui il est tard )
j'essaie en vain de modifier un fichier .nfo avec sed
avec find je recherche les fichiers .nfo et j aimerai modifier la deusieme ligne de chaque nfo en y incorporant le nom du nfo entre deux balise, un petit exemple :
essai.nfo qui contient :
<movie>
<title></title> // Titre du film
</movie>
j aimerai avoir au final :
<movie>
<title>essai</title> // Titre du film
</movie>
j essaie sans résultat avec :
#!/bin/bash
printf %s "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" |
while read -r arg
do
find "$arg" -depth -iname "*.nfo" -exec perl -i -p -e 's|<title></title> |<title>{}</title> |' "{}.nfo" \;
done
je sais que mon problème viens de find (enfin c est moi qui ne sais pas assez m en servir;)) puisque la commande perl fonctionne seul directement avec le nom de fichier a la place des {}
quelqu'un pourrait il m' aider ?
viva ubuntu ^^ et deux personnes converties !!
ps: il est pas beau mon fils ? (cf mon avatar)
Hors ligne
#2 Le 20/12/2009, à 03:35
- frafa
Re : remplacement de text dans un nfo suivant le résultat de find
Bonjour,
ouf, apres pas mal d'essaissss, 'j'ai trouvé une solution qui marche!
pas en perl car moi nullos en perl...
find "$arg" -depth -iname "*.nfo" -exec bash -c "sed -i \"s|<title>.*</title>|<title>\`basename {} .nfo\`</title>|g\" {} " \;
Hors ligne
#3 Le 20/12/2009, à 09:04
- al_boon
Re : remplacement de text dans un nfo suivant le résultat de find
merci effectivement cela fonctionne mais seulement si le nom ne contient pas d espace, tu as changé l IFS ? moi j ai :
#!/bin/bash
IFS='
'
printf %s "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" |
while read -r arg
do
find "$arg" -depth -iname "*.nfo" -exec bash -c "sed -i \"s|<title>.*</title>|<title>\`basename {} .nfo\`</title>|g\" {} " \;
done
Dernière modification par al_boon (Le 20/12/2009, à 09:04)
viva ubuntu ^^ et deux personnes converties !!
ps: il est pas beau mon fils ? (cf mon avatar)
Hors ligne
#4 Le 20/12/2009, à 09:30
- al_boon
Re : remplacement de text dans un nfo suivant le résultat de find
meme en commande direct ca ne fonctionne pas avec les espaces :
find -iname "*.nfo" -exec bash -c "sed -i \"s|<title></title>|<title>\`basename {} .nfo\`</title>|g\" {} " \;
viva ubuntu ^^ et deux personnes converties !!
ps: il est pas beau mon fils ? (cf mon avatar)
Hors ligne
#5 Le 20/12/2009, à 13:26
- frafa
Re : remplacement de text dans un nfo suivant le résultat de find
Bonjour,
non pas changé $IFS, j'ai juste testé dans terminal sur 1 ligne
comme ca devrait le faire...
find "$arg" -depth -iname "*.nfo" -exec bash -c "sed -i \"s|<title>.*</title>|<title>\$(basename \"{}\" .nfo)</title>|g\" \"{}\"" \;
Hors ligne
#6 Le 20/12/2009, à 16:08
- al_boon
Re : remplacement de text dans un nfo suivant le résultat de find
merci je test en rentrant ce soir
viva ubuntu ^^ et deux personnes converties !!
ps: il est pas beau mon fils ? (cf mon avatar)
Hors ligne
#7 Le 20/12/2009, à 17:26
- Totor
Re : remplacement de text dans un nfo suivant le résultat de find
voilà qui évitera de lancer autant de bash qu'il y a de fichiers.
find "$arg" -depth -iname "*.nfo" > >(
while read fichier
do
name="${fichier%.*}"
name="${name##*/}"
sed -i "s#\(<title>\).*\(</title>\)#\1${name}\2#" "${fichier}"
done
)
Dernière modification par Totor (Le 20/12/2009, à 22:11)
-- Lucid Lynx --
Hors ligne
#8 Le 20/12/2009, à 19:32
- al_boon
Re : remplacement de text dans un nfo suivant le résultat de find
merci Frafa cela fonctionne parfaitement,
merci aussi a toi Totor, les deux fonctionnent
viva ubuntu ^^ et deux personnes converties !!
ps: il est pas beau mon fils ? (cf mon avatar)
Hors ligne