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 18/05/2014, à 20:29

omnimax

substitution de chemin et de caractère en général

bonsoir,

je sais remplacer la fin d'un path par une autre extension

for i in **/*.(png|PNG) ; do convert "$i" "${i/.???/.jpg}" ; done

par contre je ne sais pas remplacer le début d'un path par un autre path

j'aimerais pouvoir faire cela

echo "$i"
/home/omnimax/vacances.png
/home/omnimax/documents/essai.png

substitution sur "$i"  en mentionnant /home/omnimax/images et echo "$i"
donnerait
/home/omnimax/imagess/vacances.png
/home/omnimax/images/essai.png

Dernière modification par omnimax (Le 18/05/2014, à 20:30)


14.04 unity et Linux Mint KDE 13 zsh-meilleur shell   script fire

Hors ligne

#2 Le 18/05/2014, à 20:43

pingouinux

Re : substitution de chemin et de caractère en général

Bonsoir,

for i in ...; do cp -i "$i" /home/omnimax/images; done

Hors ligne

#3 Le 19/05/2014, à 08:47

omnimax

Re : substitution de chemin et de caractère en général

#!/bin/bash

vari=$(for i in $HOME/Documents/*; do cp -i "$i" $HOME/Pictures; done)
echo "$vari"
exit 0

merci cela fonctionne, par contre

echo "$svari" ne me renvoi rien alors que l'opération s'exécute bien ?


14.04 unity et Linux Mint KDE 13 zsh-meilleur shell   script fire

Hors ligne

#4 Le 19/05/2014, à 12:13

omnimax

Re : substitution de chemin et de caractère en général

normal qu'il ne me renvoi rien puisque cp s'effectue sans code d'erreur roll

on s'est mal compris...ce qu'il me faut c'est pouvoir substituer virtuellement le path avec un autre.

Il faudrait que dans ma boucle ma variable i devienne

/home/omnimax/imagess/vacances.png
/home/omnimax/images/essai.png

au lieu de

/home/omnimax/vacances.png
/home/omnimax/documents/essai.png

mais sans effectuer la copie car je dois me servir de cette variable i pour la réinterpréter dans un bout de code par après.


14.04 unity et Linux Mint KDE 13 zsh-meilleur shell   script fire

Hors ligne

#5 Le 19/05/2014, à 16:58

pingouinux

Re : substitution de chemin et de caractère en général

À adapter :

for i in /home/omnimax/imagess/vacances.png /home/omnimax/images/essai.png; do echo "$i" "/home/omnimax/images/${i##*/}"; done

Résultat

/home/omnimax/imagess/vacances.png /home/omnimax/images/vacances.png
/home/omnimax/images/essai.png /home/omnimax/images/essai.png

Hors ligne

#6 Le 19/05/2014, à 21:06

omnimax

Re : substitution de chemin et de caractère en général

yes smile

par contre je voudrais pas être pénible mais tu pourrais m'expliquer l'usage des symboles dans :

${i##*/}

merci


14.04 unity et Linux Mint KDE 13 zsh-meilleur shell   script fire

Hors ligne

#7 Le 19/05/2014, à 21:37

pingouinux

Re : substitution de chemin et de caractère en général

Voir man bash, rubrique Parameter Expansion.

${i##*/}

va enlever à la variable i un préfixe constitué de tous les caractères jusqu'au dernier /

Hors ligne

#8 Le 20/05/2014, à 08:41

omnimax

Re : substitution de chemin et de caractère en général

super merci, je me suis mis à lire le man bash (français tongue) et je dois te dire que c'est quand même ardu-ardu...
Tu l'as étudié uniquement via man bash ?


14.04 unity et Linux Mint KDE 13 zsh-meilleur shell   script fire

Hors ligne

#9 Le 20/05/2014, à 09:17

pingouinux

Re : substitution de chemin et de caractère en général

omnimax a écrit :

Tu l'as étudié uniquement via man bash ?

Pas uniquement. Les discussions sur le forum sont une mine de renseignements, et donnent souvent des solutions auxquelles on n'aurait pas pensé.

Dans ton exemple, on pourrait faire aussi

$(basename "$i")

(voir man basename)

Hors ligne