Respostas:
Um loop for simples com um pouco de sed
irá fazer o truque:
% 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
O regex substituto em sed
diz para corresponder a cinco caracteres ( .
significa qualquer caractere) no início da string ( ^
) e removê-lo.
O Bash tem algumas possibilidades incríveis de script. Aqui está uma maneira:
for file in ??????*; do mv $file `echo $file | cut -c6-`; done
Uma maneira útil de testar o que faria é adicionar um eco na frente do comando:
for file in ??????*; do echo mv $file `echo $file | cut -c6-`; done
Os seis pontos de interrogação garantem que você tente fazer isso apenas com nomes de arquivos com mais de 5 caracteres.