Passando sed para uma variável temporária

1

Estou tentando alterar em massa alguns arquivos no bash que possuem espaços e terminações indesejadas em sua extensão.

Por exemplo, de

abc.pdf.! ut.! ut

para

abc.pdf

Eu mostrarei todo o progresso caso eu tenha feito algo mais difícil do que deveria ser. Então no começo eu 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//'';
done

O acima não funcionou para espaços ao enviar para mv, então mudei para isso

find /Users/phwd/Desktop/Film\ Sheet\ Music\ Scores\ 2  *.\!ut.\!ut | while read file
do 
    mv $file 'echo $file | sed 's/\(.*\)\.\!\ut\.\!\ut//'';
done

Isso funcionou quase, 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 mais pensando em algo?

    
por phwd 25.12.2010 / 18:48

1 resposta

2

Então, se você quiser apenas remover o final !ut.!ut , eu sugeriria algo assim:

for file in 'find ...'; do
  mv "$file" "${file%.\!ut.\!ut}"
done

Nesse caso, o shell faz seu trabalho e remove o final. Esse recurso é chamado de expansão do parâmetro .

    
por qbi 25.12.2010 / 21:03