[bash] Remplacer file:/// et %20
Résolu/Fermé
Ssylvainsab
Messages postés
2884
Date d'inscription
samedi 29 juillet 2006
Statut
Modérateur
Dernière intervention
15 août 2020
-
17 juin 2008 à 14:21
Ssylvainsab Messages postés 2884 Date d'inscription samedi 29 juillet 2006 Statut Modérateur Dernière intervention 15 août 2020 - 17 juin 2008 à 18:12
Ssylvainsab Messages postés 2884 Date d'inscription samedi 29 juillet 2006 Statut Modérateur Dernière intervention 15 août 2020 - 17 juin 2008 à 18:12
A voir également:
- [bash] Remplacer file:/// et %20
- .Dat file - Guide
- Remplacer disque dur par ssd - Guide
- Host file - Guide
- Remplacer word - Guide
- Swf file player - Télécharger - Lecture
12 réponses
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
17 juin 2008 à 14:36
17 juin 2008 à 14:36
Ssalut Ssylvain :-)
J'imagine que ya bien plus simple et élégant mais bon sed c'est pas ma spécialité :-)
kilian@kilian-laptop:~$ file=file:///machinproutprout%20machin kilian@kilian-laptop:~$ file=$(echo $file | sed -e 's/%20/ /g' | sed -e 's/file:\/\/\// /g') kilian@kilian-laptop:~$ echo $file machinproutprout machin
J'imagine que ya bien plus simple et élégant mais bon sed c'est pas ma spécialité :-)
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
17 juin 2008 à 14:43
17 juin 2008 à 14:43
Ah pas forcément avec sed? ben alors ya de multiples façons :-)
Comme:
Comme:
kilian@kilian-laptop:~$ echo $file file:///machinproutprout%20machin kilian@kilian-laptop:~$ python -c "print '$file'.replace('file:///','').replace('%20', ' ')" machinproutprout machin
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
17 juin 2008 à 15:24
17 juin 2008 à 15:24
C'est le problème du "for file in...." qui sépare aussi les espaces comme les lignes. Chaque entité séparée par des espaces/lignes/tabulation est une nouvelle occurence.
Il faudrait que tu passes en argument tes fichiers avec des guillemets, en espérant que ça n'occasionne pas trop de changement dans ton script.
Pour le problème du slash à la fin:
Il faudrait que tu passes en argument tes fichiers avec des guillemets, en espérant que ça n'occasionne pas trop de changement dans ton script.
Pour le problème du slash à la fin:
kilian@kilian-laptop:~$ echo mach/in/ | sed -e 's/\/$//g' mach/in
dubcek
Messages postés
18718
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 mars 2024
5 615
17 juin 2008 à 15:25
17 juin 2008 à 15:25
mettre le nom entre guillemets
bakfile "a\ a"
bakfile "a\ a"
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Ssylvainsab
Messages postés
2884
Date d'inscription
samedi 29 juillet 2006
Statut
Modérateur
Dernière intervention
15 août 2020
825
17 juin 2008 à 15:44
17 juin 2008 à 15:44
Le script fini pour ceux que ça intéresse. Il ne permet pas de sauvegarder des fichiers avec des espaces (ou tout autre caractère considéré comme un séparateur d'arguments) dans le nom. Mais bon, on sauvegarde surtout des fichiers de configuration, donc sans espaces.
--
Sylvain
#!/bin/bash for file in $*; do file=$(echo "$file" | sed -e 's/%20/ /g' | sed -e 's-file://--g') file=${file%/} cp -va "$file" "$file.$(date +%Y-%m-%d--%Hh%M).bak" done
--
Sylvain
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 895
17 juin 2008 à 16:17
17 juin 2008 à 16:17
Salut,
Tiens pour tes fichiers avec espaces, la nuance est subtile mais efficace, et puis la syntaxe pour "sed" sur une seule ligne...
Tiens pour tes fichiers avec espaces, la nuance est subtile mais efficace, et puis la syntaxe pour "sed" sur une seule ligne...
[jp@MDK-2008 trash]$ cat foo.sh #!/bin/bash for file in "$@"; do file=$(echo "$file" | sed -e 's|%20| |g;s|file://||g;s|/$||') echo ${file} done [jp@MDK-2008 trash]$ ./foo.sh fichier "fich avec espace" rep/ fichier fich avec espace rep [jp@MDK-2008 trash]$;-))
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
17 juin 2008 à 16:22
17 juin 2008 à 16:22
On t'attendait.
;-)
Ta réponse m'émeut!
;-)
Ta réponse m'émeut!
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 895
>
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
17 juin 2008 à 16:29
17 juin 2008 à 16:29
T'es z'ému ? Comme Vanessa ? ;-DDD
Ssylvainsab
Messages postés
2884
Date d'inscription
samedi 29 juillet 2006
Statut
Modérateur
Dernière intervention
15 août 2020
825
17 juin 2008 à 14:39
17 juin 2008 à 14:39
Merci !
Je teste ça tout de suite.
J'imagine que ya bien plus simple et élégant mais bon sed c'est pas ma spécialité :-)
Du moment que ça marche... :-)
Je ne cherche pas forcément quelque chose en avec sed par contre, juste quelque chose qui marche ;-)
--
Sylvain
Je teste ça tout de suite.
J'imagine que ya bien plus simple et élégant mais bon sed c'est pas ma spécialité :-)
Du moment que ça marche... :-)
Je ne cherche pas forcément quelque chose en avec sed par contre, juste quelque chose qui marche ;-)
--
Sylvain
Ssylvainsab
Messages postés
2884
Date d'inscription
samedi 29 juillet 2006
Statut
Modérateur
Dernière intervention
15 août 2020
825
17 juin 2008 à 15:02
17 juin 2008 à 15:02
Hm, enfin c'est plus simple à lire avec sed qu'avec python quand même ;-)
J'ai toujours un problème : depuis le gestionnaire de fichier, je ne peux pas utiliser la commande sur des fichiers dont le nom contient des espaces. Je crois que c'est parce la commande echo $file enlève les backslashs qui échappent les espaces. Comment faire pour ne pas les enlever (je vais essayer avec echo -e) ?
Et il y a toujours le problème du slash à la fin du nom des dossiers.
--
Sylvain
J'ai toujours un problème : depuis le gestionnaire de fichier, je ne peux pas utiliser la commande sur des fichiers dont le nom contient des espaces. Je crois que c'est parce la commande echo $file enlève les backslashs qui échappent les espaces. Comment faire pour ne pas les enlever (je vais essayer avec echo -e) ?
Et il y a toujours le problème du slash à la fin du nom des dossiers.
--
Sylvain
Ssylvainsab
Messages postés
2884
Date d'inscription
samedi 29 juillet 2006
Statut
Modérateur
Dernière intervention
15 août 2020
825
17 juin 2008 à 15:07
17 juin 2008 à 15:07
Hm, non, en fait ça vient de bash lui-même qui interprète blabla\ blabla comme deux arguments "blabla\" ($1) et "blabla" ($2) au lieu de "blabla blabla" :
--
Sylvain
/tmp/bakfile $ touch a\ a /tmp/bakfile $ ll total 0 -rw-r--r-- 1 sylvain sylvain 0 2008-06-17 15:06 a a /tmp/bakfile $ bakfile a\ a cp: ne peut évaluer `a': Aucun fichier ou répertoire de ce type cp: ne peut évaluer `a': Aucun fichier ou répertoire de ce type
--
Sylvain
Ssylvainsab
Messages postés
2884
Date d'inscription
samedi 29 juillet 2006
Statut
Modérateur
Dernière intervention
15 août 2020
825
17 juin 2008 à 15:35
17 juin 2008 à 15:35
bakfile fichier avec des espaces bakfile 'fichier avec des espaces' bakfile "fichier avec des espaces" bakfile fichier\ avec\ des\ espaces bakfile 'fichier\ avec\ des\ espaces' bakfile "fichier\ avec\ des\ espaces"
Aucun ne marche... dommage je crois que je vais devoir me contenter de sauvegarder des fichiers sans espaces.
Et sinon, aucune idée pour supprimer le slash à la fin des chemins des répertoires ?
--
Sylvain
Ssylvainsab
Messages postés
2884
Date d'inscription
samedi 29 juillet 2006
Statut
Modérateur
Dernière intervention
15 août 2020
825
17 juin 2008 à 15:39
17 juin 2008 à 15:39
Il suffisait que je cherche un peu : http://pagesperso-orange.fr/gleu/absfr.tuxfamily.org/abs-2.3-fr/textproc.html
--
Sylvain
n=${n%/} # Supprime le slash de fin
--
Sylvain
Ssylvainsab
Messages postés
2884
Date d'inscription
samedi 29 juillet 2006
Statut
Modérateur
Dernière intervention
15 août 2020
825
17 juin 2008 à 16:56
17 juin 2008 à 16:56
Merci !
Voilà la script avec lequel tout fonctionne :
Je croyais pourtant que $* et $@ étaient la même chose... m'enfin.
--
Sylvain
Voilà la script avec lequel tout fonctionne :
#!/bin/bash for file in "$@"; do file=$(echo "$file" |sed -e 's|%20| |g;s|file://||;s|/$||') cp -a "$file" "$file.$(date +%Y-%m-%d--%Hh%M).bak" done
Je croyais pourtant que $* et $@ étaient la même chose... m'enfin.
--
Sylvain
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 895
17 juin 2008 à 17:44
17 juin 2008 à 17:44
Je croyais pourtant que $* et $@ étaient la même chose... m'enfin.
En fait oui et non.
Les 2 représentent effectivement l'ensemble des paramètres à la différence prêt que :
* représente l'ensemble des paramètres sous la forme d'un seul argument
@ représente l'ensemble des paramètres sous la forme d'un argument par parémètre
et il faut aussi tenir compte des quotes autour...
Exemple :
En fait oui et non.
Les 2 représentent effectivement l'ensemble des paramètres à la différence prêt que :
* représente l'ensemble des paramètres sous la forme d'un seul argument
@ représente l'ensemble des paramètres sous la forme d'un argument par parémètre
et il faut aussi tenir compte des quotes autour...
Exemple :
[jp@MDK-2008 trash]$ cat sylvain.sh #! /bin/bash echo echo 'Exemple avec $*' echo "Affichage sans quotes double" for argument in $* do echo "Paramètre : $argument" done echo echo 'Exemple avec "$*"' echo "Affichage avec quotes double" for argument in "$*" do echo "Paramètre : $argument" done echo echo 'Exemple avec $@' echo "Affichage sans quotes double" for argument in $@ do echo "Paramètre : $argument" done echo echo 'Exemple avec "$@"' echo "Affichage avec quotes double" for argument in "$@" do echo "Paramètre : $argument" done [jp@MDK-2008 trash]$ ./sylvain.sh sylvain kilian jipicy "comment ça marche" Exemple avec $* Affichage sans quotes double Paramètre : sylvain Paramètre : kilian Paramètre : jipicy Paramètre : comment Paramètre : ça Paramètre : marche Exemple avec "$*" Affichage avec quotes double Paramètre : sylvain kilian jipicy comment ça marche Exemple avec $@ Affichage sans quotes double Paramètre : sylvain Paramètre : kilian Paramètre : jipicy Paramètre : comment Paramètre : ça Paramètre : marche Exemple avec "$@" Affichage avec quotes double Paramètre : sylvain Paramètre : kilian Paramètre : jipicy Paramètre : comment ça marche [jp@MDK-2008 trash]$;-))
Ssylvainsab
Messages postés
2884
Date d'inscription
samedi 29 juillet 2006
Statut
Modérateur
Dernière intervention
15 août 2020
825
>
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
17 juin 2008 à 18:12
17 juin 2008 à 18:12
Ah, merci :-)
--
Sylvain
--
Sylvain