execfich
: Exécution d'une même commande sur une liste de fichiers.
Syntaxe : <listage de noms de fichiers >
| execfich [-t] <commande>
A gauche du | on met une commande
qui retourne une liste de fichiers (par exemple
ls ou find ).
A droite de execfich on introduit
la commande qui doit s'appliquer à ces fichiers.
Le premier argument de execfich est la commande à exécuter suivi
si nécessaire des arguments qui doivent figurer avant le nom de
fichier.
Les arguments suivants, sont les arguments de la commande qui
doivent figurer après le nom de fichier.
L'option -t permet de lancer
l'exécution en mode trace. Les commandes lancées sont affichées à
l'écran.
Exemple d'utilisation : Déplacer dans
/anciens tous les fichiers du disque dur qui n'ont
pas été modifiés depuis plus d'un an.
find / -mtime +365 | execfich mv /anciens
exécutera des commandes de la forme :
mv <fichier> /anciens
Si l'on désire faire un déplacement inconditionnel (pas de demande
de confirmation si un fichier de même nom existe déjà dans
/anciens), on utilisera l'option
-y .
find / -mtime +365 | execfich "mv -y" /anciens
exécutera des commandes de la forme :
mv -y <fichier> /anciens
alors que :
find / -mtime +365 | execfich mv -y /anciens
est incorrect car il génère des commandes de la forme : mv <fichier> -y /anciens
Equivalent UNIX :
Execfich permet de traiter sous MS-DOS des commandes qui sous
UNIX auraient la forme :
<commande> `<listage de noms de fichiers
>` <autres arguments>
Un équivalent UNIX de execfich peut s'écrire avec sed
et sh :
com=$1
shift
sed "s/^/$com /
s/$/ `echo $* | tr / ~`/" | tr ~ / | sh
Si des / ne doivent jamais figurer
dans les arguments, on peut simplifier cette commande :