Há um monte de perguntas neste site sobre renomear arquivos usando loops de shell como esse, e alguns sobre o uso de sed
para isso. (por exemplo, isso , this )
Você precisará passar o nome do arquivo para sed
com um pipe e usar a substituição de comando para capturar o resultado, algo assim:
mv "$f" "$(echo "$f" | sed -e '...' )"
O comando sed
que você usou precisa de um pouco de correção: Por um lado, você citou o parêntese de abertura, mas não os de fechamento, então o agrupamento não funcionará. Além disso, não sei por que você gostaria de colocar os fragmentos LabelMe
de volta no nome do arquivo. Se você quiser removê-los, basta pular o agrupamento e as referências \N
:
's/--LabelMe.*LabelMe--//'
Então, na íntegra:
for f in "$@"
do
mv "$f" "$(echo "$f" | sed -e 's/--LabelMe.*LabelMe--//' )"
done
Outra maneira seria usar a substituição de parâmetros do shell para fazer o mesmo. A substituição ${par/pattern/replacement}
não é padrão, mas é suportada em muitos shells:
for f in "$@"
do
mv "$f" "${f/--LabelMe*LabelMe--/}"
done
(note que não é uma regex, então a sintaxe de "qualquer coisa" é apenas *
e não .*
)