Depois de clicar no diretório correto, esse script solucionará de forma confiável sua necessidade (não é possível devido à expansão ${var//pat/str}
):
#!/bin/bash
set -- *_*
for file; do
mv -- "$file" "${file//_/ }"
done
*_*
O glob *_*
selecionará todos os arquivos que possuem _
em seus nomes.
set --
Esses nomes (incluindo espaços ou novas linhas) serão definidos confiavelmente nos parâmetros posicionais $1
, $2
, etc. com o comando simples set -- "list"
for file;
Em seguida, cada parâmetro posicional será (por sua vez) atribuído ao arquivo var.
do ... done
contém os comandos para executar (para cada $file
).
mv -- "$file" "${file//_/ }"
moverá (renomear) cada arquivo para o mesmo nome com cada (todos) _
substituído por (espaço).
Observação : você pode adicionar a opção -i
(interativo) para evitar a substituição de arquivos já existentes. Se o arquivo existir, mv
perguntará. Com uma ressalva: é preciso haver um shell interativo em que mv
possa se comunicar com o usuário.
mv -i -- "$file" "${file//_/ }"