Passando sed para uma variável temporária

Passando sed para uma variável temporária

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.!utsugiro 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.

informação relacionada