OVH Cloud OVH Cloud

lancer un script dans tous les dossier

12 réponses
Avatar
Fabien MORIN
Bonjour, tjs par rapport =C3=A0 mon probl=C3=A8me d'encodage ("script pour
renommer les fichiers et dossiers", Pascal m'avait fait un petit script
en lisp qui permet de renommer correctement tous les fichier ce trouvant
de le r=C3=A9pertoire o=C3=B9 est ex=C3=A9cut=C3=A9 le script.
Maintenant, je voudrais faire en sorte que le script s'applique =C3=A0 tous
les dossier r=C3=A9cursif du dossier courant.

Pour ce faire j'ai pens=C3=A9 =C3=A0 faire un petit script qui appel le scr=
ipt de
pascal.

avec une commande du genre : ls -d */ je parvient =C3=A0 lister tous les
r=C3=A9pertoires contenus dans le r=C3=A9pertoire courant, mais je ne parvi=
ent pas
=C3=A0 lister les r=C3=A9pertoires contenus dans ces r=C3=A9pertoires (ls -=
Rd */ me
renvoi la m=C3=AAme chose).

Je suis vraiment d=C3=A9butant au niveau script et unix, mais j'avais pens=
=C3=A9
utiliser le retour d'une telle fonction pour lancer le script dans tous
les r=C3=A9pertoires (enfin je vois pas trop encore comment ...)

Quelqu'un pourrait il m'aider un peut



voici le script de pascal : (message du Mon, 30 Oct 2006 21:34:53 +0100)


[pjb@thalassa test]$ cat ../de-utf-8=20
#!/usr/bin/clisp -q -ansi -norc -E iso-8859-1
;; http://clisp.cons.org
;; ftp://ftp.gnu.org/gnu/clisp/release/2.39/clisp-2.39.tar.bz2
(setf custom:*terminal-encoding* charset:utf-8)
(defun de-utf-8 (s)
(ext:convert-string-from-bytes (map 'vector 'char-code s)
charset:utf-8))
(dolist (item (directory "*.*"))
(let ((newname (ignore-errors (de-utf-8 (de-utf-8 (file-namestring
item))))))
(cond
((equalp newname (file-namestring item)) :do-nothing)
((null newname) (format t "Cannot convert ~S twice~%" item))
(t (format t "Renamed ~{~S~^ ~}~%"
(multiple-value-list
(rename-file item (merge-pathnames newname
item))))))))

10 réponses

1 2
Avatar
BL8s

Je suis vraiment débutant au niveau script et unix, mais j'avais pensé
utiliser le retour d'une telle fonction pour lancer le script dans tous
les répertoires (enfin je vois pas trop encore comment ...)

Quelqu'un pourrait il m'aider un peut


oui :-)

for d in `find . -type d`; do cd $d; . ../nom_du_script; cd ..; done
ou quelque chose comme ca

avec le script en question dans le repertoire d'où tu lances cette commande


--
<http://bl8s.be/bsd>
<http://bl8s.be/sketchblog>

Avatar
lhabert
BL8s :

Je suis vraiment débutant au niveau script et unix, mais j'avais pensé
utiliser le retour d'une telle fonction pour lancer le script dans tous
les répertoires (enfin je vois pas trop encore comment ...)

Quelqu'un pourrait il m'aider un peut


oui :-)

for d in `find . -type d`; do cd $d; . ../nom_du_script; cd ..; done


Mais non! C'est tout sauf robuste.

find . -type d -exec sh -c 'cd "$0"&& /where/is/the/script' '{}' ';'


Avatar
Fabien MORIN
BL8s :

Je suis vraiment débutant au niveau script et unix, mais j'avais pensé
utiliser le retour d'une telle fonction pour lancer le script dans tou s
les répertoires (enfin je vois pas trop encore comment ...)

Quelqu'un pourrait il m'aider un peut


oui :-)

for d in `find . -type d`; do cd $d; . ../nom_du_script; cd ..; done


Mais non! C'est tout sauf robuste.

find . -type d -exec sh -c 'cd "$0"&& /where/is/the/script' '{}' ';'


"for d in `find . -type d`; do cd $d; . ../nom_du_script; cd ..; done"

pourquoi n'est ce pas robuste ?



Avatar
lhabert
Fabien MORIN :

"for d in `find . -type d`; do cd $d; . ../nom_du_script; cd ..; done"

pourquoi n'est ce pas robuste ?


Les espaces et caractères de glob dans les noms de fichiers. (Je passe sur
le « . » avant « ../nom_du_script », j'imagine que c'est une coquille, et
sur le fait que le « cd .. » ne va faire ce qu'on veut que si il n'y a pas
de sous-sous répertoires.)

Avatar
Fabien MORIN
BL8s :

Je suis vraiment débutant au niveau script et unix, mais j'avais pensé
utiliser le retour d'une telle fonction pour lancer le script dans tou s
les répertoires (enfin je vois pas trop encore comment ...)

Quelqu'un pourrait il m'aider un peut


oui :-)

for d in `find . -type d`; do cd $d; . ../nom_du_script; cd ..; done


Mais non! C'est tout sauf robuste.

find . -type d -exec sh -c 'cd "$0"&& /where/is/the/script' '{}' ';'



find . -type d -exec sh -c 'cd "$0"&& /where/is/the/script' '{}' ';'

merci, ça marche impécable, mais si, je veux exécuter le scr ipt uniquement dans des répertoires non cachés, comment puis-je f aire ?



Avatar
BL8s
BL8s :

Je suis vraiment débutant au niveau script et unix, mais j'avais pensé
utiliser le retour d'une telle fonction pour lancer le script dans tous
les répertoires (enfin je vois pas trop encore comment ...)

Quelqu'un pourrait il m'aider un peut
oui :-)


for d in `find . -type d`; do cd $d; . ../nom_du_script; cd ..; done


Mais non! C'est tout sauf robuste.


milles escuses ;-)


find . -type d -exec sh -c 'cd "$0"&& /where/is/the/script' '{}' ';'


tiens, pourquoi mettre les {} et ; dans des '' différents ?


--
<http://bl8s.be/sketchblog>
<http://bl8s.be/bsd>



Avatar
lhabert
Fabien MORIN :

si, je veux exécuter le script uniquement dans des répertoires non cachés


Tu veux dire dont le nom commence par « . » ? Il suffit de dire à find de
les exclure :


find . -type d '!' -name '.*' -exec sh -c 'cd "$0"&& /where/is/the/script' '{}' ';'

Avatar
lhabert
BL8s :

tiens, pourquoi mettre les {} et ; dans des '' différents ?


Parce que '{} ;', ça ne marche pas. Si ta question est pourquoi mettre
« {} » dans des « '' », effectivement, ça ne doit pas être nécéssaire, enfin
on n'est jamais à l'abris d'un shell bizarre, et puis je préfère quoter dès
que j'ai le moindre doute plutôt que de m'encombrer la mémoire avec la liste
exacte des cas où c'est nécessaire.

Avatar
Fabien MORIN
Merci beaucoup, ça ma permi de renommer tous les fichiers de mon disqu e
dur. Il me reste les non de dossier pour lesquels le script ne peut
s'appliquer. (apparemment c'est plus compliqué)


BL8s :

Je suis vraiment débutant au niveau script et unix, mais j'avais pensé
utiliser le retour d'une telle fonction pour lancer le script dans to us
les répertoires (enfin je vois pas trop encore comment ...)

Quelqu'un pourrait il m'aider un peut
oui :-)


for d in `find . -type d`; do cd $d; . ../nom_du_script; cd ..; done


Mais non! C'est tout sauf robuste.


milles escuses ;-)


find . -type d -exec sh -c 'cd "$0"&& /where/is/the/script' '{}' ';'


tiens, pourquoi mettre les {} et ; dans des '' différents ?







Avatar
Matthieu Moy
(Luc Habert) writes:

« {} » dans des « '' », effectivement, ça ne doit pas être nécéssaire, enfin
on n'est jamais à l'abris d'un shell bizarre, et puis je préfère quoter dès
que j'ai le moindre doute plutôt que de m'encombrer la mémoire avec la liste
exacte des cas où c'est nécessaire.


Oui mais ça, c'est codé en dur dans les muscles des doits. Quand je
tappe « find », ça tappe tout seul « {} ; » derrière.

(Par contre, il faut bien quoter le « ; », sinon, rien ne va plus. Et
c'est une erreur désespérément classique de débutant)

--
Matthieu

1 2