
Estou tentando alterar em massa alguns arquivos no bash que possuem espaços e finais indesejados em suas extensões.
Por exemplo de
abc.pdf.!ut.!ut
para
abc.pdf
Mostrarei todo o progresso caso eu tenha feito algo mais difícil do que deveria ser. Então, no começo, comecei com algo como
for file in `find /Users/phwd/Desktop/Film\ Sheet\ Music\ Scores\ 2 *.\!ut.\!ut`;
do
mv $file `echo $file | sed 's/\(.*\)\.\!\ut\.\!\ut/\1/'`;
done
O procedimento acima não funcionou para espaços ao enviar mv, então mudei para isto
find /Users/phwd/Desktop/Film\ Sheet\ Music\ Scores\ 2 *.\!ut.\!ut | while read file
do
mv $file `echo $file | sed 's/\(.*\)\.\!\ut\.\!\ut/\1/'`;
done
Isso quase funcionou, mas mv começou a dizer uma mensagem arbitrária
usage: mv [-f | -i | -n] [-v] source target
mv [-f | -i | -n] [-v] source ... directory
Estou pensando demais em alguma coisa?
Responder1
Então, se você quiser apenas remover o final, !ut.!ut
sugiro algo assim:
for file in `find ...`; do
mv "$file" "${file%.\!ut.\!ut}"
done
Neste caso o shell faz o seu trabalho e remove o final. Esse recurso é chamadoexpansão de parâmetros.