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))))))))

2 réponses

1 2
Avatar
Olivier Miakinen

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


Oui, pour moi aussi le « {} ; » vient tout seul à la fin du « find ».
Ça doigt être codé en dur chez moi aussi.

Avatar
Stephane Chazelas
2006-11-3, 15:37(+00), Luc Habert:
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' '{}' ';'


Pour eviter de lancer un sh par repertoire:

find . -type d '!' -name '.*' -exec sh -c '
for i do
(cd -P -- "$0" && exec /where/is/the/script)
done' find-sh {} +

(Dans ce cas particulier, "cd -P --" est equivalent a "cd", mais
dans l'idee, c'est "cd -P --" que tu veux.)

--
Stéphane


1 2