[Linux-bruxelles] Suppression d'espace blanc dans les noms de répertoires

Serge Munhoven serge at lilit.be
Mar 17 Oct 01:18:37 CEST 2006


Bonsoir,

On Mon, Oct 16, 2006 at 09:16:01PM +0200, Dominique Bonneels wrote:

 >  Suite à une mauvaise manipulation, j'ai tous des noms de répertoires qui
 >  contiennent un espace blanc à la fin. Je souhaiterais l'éliminer. Ayant
 >  une centaine de répertoire, je n'ai pas envie de me tapper un mv à
 >  chaque fois. Quelqu'un a-t-il une idée?
 >  
 >  J'avais penser un truc du style :
 >  
 >  ls|xargs  mv /home/dominique/www/'{} ' /home/dominique/www/'{}'

Presque bon, mais ...

ls -1

(normalement pas requis parce que le défaut si le résultat de ls est
envoyé vers un pipe, sauf si le ls en question est un alias);

xargs -i

demande à xargs de traiter les entrées une à une et non pas autant à la
fois que le shell on digère;

'{} ' / '{}'

pas sûr,  mais à ma compréhension '{}' contient déjà l'espace (donc
'{} ' n'existe pas et '{}' n'est pas ce que tu veux).

 >  ou un 
 >  
 >  ls |xargs sed -e 's/ //g'

agirait aussi sur d'éventuels espaces à l'intérieur des noms, ... si la
commande faisait du sens (sed agit sur le *contenu* d'un fichier ou de
son STDIN;  c'est xargs qui avale le STDIN ici et renvoie des arguments
à sed qui sont des noms de fichier foireux parce que contenant un espace et
en plus ce n'est pas leur contenu que tu veux retravailler).

 >  ... mais ni l'un ni l'autre ne fonctionne.

Mais les deux ensemble peut-être.

ls -1 | sed -n -e 's/ $//p' | xargs -i echo mv '/home/dominique/www/{} ' '/home/dominique/www/{}'

sed -n supprime l'impression systématique.  Seuls les lignes avec substitution
effectuée sont imprimées grâce au p (si jamais il y a des fichiers non
concernés).
echo est bien sûr en trop.  Mais dans des cas pareils je préfère d'abord voir
avant de faire faire. (l'echo avale peut-être les '' en cours de route; le mv
tout seul en tiendra compte comme il faut).

Bonne chance/amusement.

 - Serge

PS: je me rappelle vaguement avoir vu passer récemment sur cette liste
une commande (en ligne de commande) moins tordue pour des mv en vrac de
ce genre.




Plus d'informations sur la liste de diffusion Linux-bruxelles