Como substituir os espaços em nomes de arquivos com sublinhado [duplicado]

1

Estou tentando renomear todos os arquivos em um diretório, para que eles não tenham espaços. Eu estou fazendo um script bash e eu realmente não sei o que fazer, eu tentei todos os tipos de citações e escapar, mas eu não tenho certeza que combinação poderia funcionar.

#!/bin/bash
#change empty spaces in filenames to underlineos
lsarray="$(echo "$(pwd)""/*")"
for i in $lsarray
do
    if [[ $i == *" "* ]] 
    then
        line=$(echo $i | sed 's/ \+/\_/g')
        j=$(echo $i | sed 's/ \+/\ /g')
        mv "$j" "$line"
        echo "$i"
        echo "$j"
        echo "$line"
        fi
done

desde mv precisa de "expansão de variável especial" im usando aspas duplas nele. Alguma dica apreciada.

    
por user198918 06.11.2016 / 16:11

2 respostas

5

Em bash para todos os arquivos na pasta.

for name in *; do mv "$name" "${name// /_}"; done

O ${name/pattern/replace} substitui pattern a replace ( Parâmetro Bash Expansão . Se o padrão começar com / (aqui o padrão é / + Space ), ele substituirá todas as ocorrências. Em seguida, mv renomeia o arquivo de name para o novo nome com espaços substituídos.

    
por 06.11.2016 / 16:46
4

Com a renomeação de Perl:

rename 'y/ /_/' *
    
por 06.11.2016 / 16:37