Não há necessidade de usar sed, isso pode ser controlado pela expansão de parâmetros
mv -- "$x" "${x//%20/ }"
FWIW, eu estaria substituindo os %20
s por um sublinhado (ou algo assim); Eu odeio nomes de arquivos que contêm espaços. Mas eu acho que aprender a escrever scripts bash que podem manipular espaços e outros caracteres especiais em nomes de arquivos é uma coisa boa. :)
Como Izkata menciona nos comentários, é muito importante citar os parâmetros! Aspas duplas no bash (e shells relacionadas) não são meros delimitadores de strings, elas também significam que você não quer que a divisão de palavras ocorra. Portanto, se x
contiver um nome de arquivo com um espaço, $x
será tratado como dois argumentos, mas "$x"
será tratado como um único argumento. Se usarmos aspas simples, inibiremos a expansão dos parâmetros, então '$x'
apenas resultará em uma string literal contendo $x
, que geralmente não é o que queremos. :)
PS. Obrigado ao Monsieur Chazelas por fornecer o --
ausente na minha linha de comando. --
indica o final das opções na lista de argumentos; sem ele, é possível que nomes de arquivos que iniciam com -
sejam interpretados como opções.