1) for file; do
faz um loop sobre os parâmetros posicionais, ou seja, argumentos de linha de comando para o script. Use for file in *; do
para percorrer os arquivos no diretório (ou _*
para obter apenas aqueles com um prefixo de sublinhado).
2) Você pode usar ${file#_}
em vez de ${file//_/}
para remover o sublinhado do início do nome do arquivo. ${par#word}
remove especificamente uma parte do começo, e é um recurso padrão, ao contrário de ${par/pat/repl}
. E é claro que ${file//_}
removeria as barras all (desde que você usou uma barra dupla), não apenas a primeira.
3) pelo menos no Linux (GNU userland) e no FreeBSD, você pode usar mv -n
para solicitar que ele não sobrescreva nenhum arquivo. Apenas no caso.
Então,
for file in _*; do
mv -n -- "$file" "${file#_}"
done