Réponses:
Une simple boucle for avec un peu de sed
fera l'affaire:
% touch xxxxx{foo,bar,baz}
% ls -l xxxxx{foo,bar,baz}
-rw-r--r-- 1 jamesog wheel 0 29 Dec 18:07 xxxxxbar
-rw-r--r-- 1 jamesog wheel 0 29 Dec 18:07 xxxxxbaz
-rw-r--r-- 1 jamesog wheel 0 29 Dec 18:07 xxxxxfoo
% for file in xxxxx*; do mv $file $(echo $file | sed -e 's/^.....//'); done
% ls -l foo bar baz
-rw-r--r-- 1 jamesog wheel 0 29 Dec 18:07 bar
-rw-r--r-- 1 jamesog wheel 0 29 Dec 18:07 baz
-rw-r--r-- 1 jamesog wheel 0 29 Dec 18:07 foo
Le regex de substitution dans sed
dit de faire correspondre cinq caractères ( .
signifie n'importe quel caractère) au début de la chaîne ( ^
) et de le supprimer.
Bash a des possibilités de script incroyables. Voici une façon:
for file in ??????*; do mv $file `echo $file | cut -c6-`; done
Un moyen pratique de tester ce qu'il ferait est d'ajouter un écho devant la commande:
for file in ??????*; do echo mv $file `echo $file | cut -c6-`; done
Les six points d'interrogation garantissent que vous n'effectuez cette opération qu'avec des noms de fichiers de plus de 5 caractères.