Você pode usar rename
...
rename -n 's/^[0-9]+ - //' *
Remova -n
após o teste para realmente renomear os arquivos
Explicação
-
s/old/new/
replaceold
comnew
-
^
início da cadeia -
[0-9]+
alguns números
Eu tenho este diretório e quero renomear os arquivos:
===> ls -1 Der-vierte-Weise/
10 - 10 - Erkenntniss.ogg
1 - 01 - Hoffnung.ogg
11 - 11 - Wahrheit.ogg
12 - 12 - Dankbarkeit.ogg
13 - 13 - Kredits.ogg
2 - 02 - Familie.ogg
3 - 03 - Demut.ogg
4 - 04 - Freude.ogg
5 - 05 - Schoenheit.ogg
6 - 06 - Solidaritaet.ogg
7 - 07 - Entscheidung.ogg
8 - 08 - Hilfe.ogg
9 - 09 - Unterstuetzung.ogg
O resultado deve ser assim:
===> ls -1 Der-vierte-Weise/
01 - Hoffnung.ogg
02 - Familie.ogg
...
Eu gostaria de resolver isso com ferramentas de shell comuns.
Você pode usar rename
...
rename -n 's/^[0-9]+ - //' *
Remova -n
após o teste para realmente renomear os arquivos
s/old/new/
replace old
com new
^
início da cadeia [0-9]+
alguns números bash
para retirar a parte necessária do início:
for f in *[[:blank:]]*.ogg; do echo mv -i -- "$f" "${f#[[:digit:]]*-[[:blank:]]}"; done
Formulário expandido:
for f in *[[:blank:]]*.ogg; do
echo mv -i -- "$f" "${f#[[:digit:]]*-[[:blank:]]}"
done
echo
é para execução a seco; livrar-se dele para uma ação real:
for f in *[[:blank:]]*.ogg; do mv -i -- "$f" "${f#[[:digit:]]*-[[:blank:]]}"; done
Exemplo:
% ls -1
1 - 01 - Hoffnung.ogg
2 - 02 - Familie.ogg
% for f in *[[:blank:]]*.ogg; do mv -i -- "$f" "${f#[[:digit:]]*-[[:blank:]]}"; done
% ls -1
01 - Hoffnung.ogg
02 - Familie.ogg
Tags command-line bash batch-rename