renomeia arquivos para alterar espaços para sublinhado

0

Eu tenho uma carga de arquivos (mp3, wav, txt, doc) que foram criados no MS Windows e eles têm espaços em seus nomes. Por exemplo, The file of whoever.doc

Eu gostaria de renomeá-los todos de uma vez, substituindo o espaço por um sublinhado ou ponto.

    
por john 16.11.2017 / 19:44

4 respostas

6

O shell pode fazer isso facilmente:

for file in *.doc *.mp3 *.wav *.txt
do
  mv -- "$file" "${file// /_}"
done

Altere o *.doc ... glob para corresponder aos arquivos nos quais você está interessado em renomear.

Para renomear todos os arquivos no diretório atual que atualmente possuem espaços em seus nomes de arquivos:

for file in *' '*
do
  mv -- "$file" "${file// /_}"
done

Você também pode considerar adicionar uma verificação "clobber":

for file in *' '*
do
  if [ -e "${file// /_}" ]
  then
    echo Warning, skipping "$file" as the renamed version already exists
    continue
  fi

  mv -- "$file" "${file// /_}"
done
    
por 16.11.2017 / 19:51
1

Você pode usar sed , por exemplo:

mv -i "${original_file}" "$(echo "${original_file}" | sed 's/ /_/g')"

Aqui está um exemplo.

Crie um arquivo com espaços em seu nome:

touch "/tmp/test file with spaces"

Renomeie o arquivo:

mv -i \
"/tmp/test file with spaces" \
"$(echo "/tmp/test file with spaces" | sed 's/ /_/g')"

Aqui está o novo nome do arquivo:

test_file_with_spaces

Você pode fazer a mesma coisa com tr , ou seja:

mv -i "${original_file}" "$(echo "${original_file}" | tr ' ' _)"

Ou usando a substituição de substring Bash:

mv -i "${original_file}" "${original_file// /_}"

Ou usando o comando rename :

rename "s/ /_/g" "${original_file}"
    
por 16.11.2017 / 19:47
1
rename s/\ /_/ *

Não me lembro agora se o espaço em branco precisa escapar ou não com a renomeação.

(Ou troque * por qualquer extensão.)

    
por 16.11.2017 / 20:13
1

Além do que foi mencionado, o desintoxicação do programa pode ser de algum interesse. Ele é projetado especificamente para fazer esse tipo de coisa e lida com muitas outras coisas além de espaços. Desde que você não tenha nenhum sinal diacrítico, parênteses ou outras coisas estranhas nos nomes dos arquivos, o seguinte deve fazer exatamente o que você quer se for executado no topo da árvore de diretórios:

detox -r .

Observe que isso também consertará os nomes dos diretórios, portanto, não execute isso no diretório Users de um sistema Windows, caso contrário, é possível quebras (o Windows exige nomes específicos para determinadas pastas nos diretórios do usuário , e isso vai mudar os nomes dessas pastas.

    
por 16.11.2017 / 20:44