Para remover um determinado caracter (no exemplo, a idéia é remover o espaço) do nome de vários arquivos contidos em um determiado diretório rodamos o seguinte script (supondo que você usa o bash como instepretador):

#!/bin/bash

find . -name '* *' | while read arquivo
do  
    alvo=`echo "$arquivo" | sed 's/ /_/g'`  
    echo "Renomeando '$arquivo' para '$alvo'"
    mv "$arquivo" "$alvo"
done

Vamos a explicação das linhas mais relevantes:

#!/bin/bash

A linha 1 indica o caminho do interpretador de comandos que estamos utilizando, no caso estou usando o bash.

find . -name '* *' | while read arquivo  

O comando find busca por arquivos no diretório atual (indicado pelo ponto) cujos nomes contém espaço. O operador pipe ( | ) “conecta” a saída (stdout) do comando find a entrada(stdin) do comando read. O laço itera em cada linha do resultado, armazenando-o na variável arquivo. Para entender melhor a sintaxe do comando while do … done recomendo o seguinte link.

alvo=`echo "$arquivo" | sed 's/ /_/g'`  

Nessa linha, a varivável alvo recebe o nome dos arquivo da iteração atual com os espaços substituidos pelo caracter _. A sintaxe do parâmetro s do comando sed é:

sed 's/<expressão_regular>/<texto_substituto>/[g]'  

Assim que a expressão regular é atendida o comando sed o substitui pelo pelo texto_substituto. O modificador g indica que todas as ocorrências da expressão regular devem ser substituidas e não só a primeira.

O novo nome dos arquivos é atribuído na linha 6:

mv "$arquivo" "$alvo"  

O script está disponível em minha conta no github!

Fontes:
http://design.liberta.co.za/articles/how-to-remove-spaces-from-filenames-in-linuxunix/
http://homepages.dcc.ufmg.br/~joaoreis/Site%20de%20tutoriais/tools/er.html

Anúncios