Respuestas:
Un bucle simple con un poco de sed
hará el truco:
% 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
El regex sustituto en sed
dice que coincida con cinco caracteres ( .
significa cualquier carácter) al comienzo de la cadena ( ^
) y elimínelo.
Bash tiene algunas posibilidades increíbles de secuencias de comandos. Aquí hay una manera:
for file in ??????*; do mv $file `echo $file | cut -c6-`; done
Una forma práctica de probar lo que haría es agregar un eco delante del comando:
for file in ??????*; do echo mv $file `echo $file | cut -c6-`; done
Los seis signos de interrogación aseguran que solo intente hacer esto con nombres de archivo de más de 5 caracteres.
Puedes usar sed para hacer esto
for file in * ; do mv $file $(echo $file |sed 's/^.\{5\}//g'); done