[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: renommer en lot



Le (on) mardi 29 janvier 2008 20:00, Jack.R a écrit (wrote) :

>> Il y a au moins un problème avec ce script ; la liste des fichiers
>> à traiter doit tenir sur la ligne de commande.
> 
> Je viens de faires des essais avec une trentaine de fichier dont les
> noms font environ 70 caractères, ls passe bien à la ligne mais cela
> fonctionne.

Je crois que ce n'est pas ce ça qu'il s'agissait. Le problème est que la
ligne de commande que peut traiter un shell a une longueur limitée. Donc si
il y trop de fichiers, le « for i in `ls -r` » va être transformé en 
« for i in 1.png 2.png [...] n.png » qui va faire exploser le shell si n est
trop grand.

Euh, ceci dit, en testant là chez moi (sous zsh), un petit
% for i in `seq 1 1000000`; do echo "$i "; done; echo '';
n'a pas l'air de faire exploser quoi que ce soit, alors qu'il produit quand
même une *très* longue ligne de commande d'après le raisonnement précédent.

> Cela cloche lorsqu'il y a des espaces dans le nom des fichiers à
> traiter.
> 
C'est logique. Pour éviter ça, on pourrait, avec zsh, faire :
for i in **/*.png
mais on perd alors le classement par date.

Par ailleurs, il y a un autre problème avec le `ls -t -r *.png`, lié au
traitement des *, qui est effectué par le shell, et non par ls : ainsi,
le -r ne sert ici à rien, car ls ne verra que la liste des .png du
répertoire courant, produite par le shell : il ne fera en fait que le
classement par date.
 

Manuel.


Reply to: