Publicações de códigos fontes de Shell Script e outras linguagens do Murilo Fujita
sexta-feira, 5 de agosto de 2011
Renomeando arquivos para o padrão Unix
Muitas vezes recebo arquivos que vem com espaços e parenteses e não é muito conveniente tratá-los no shell. Então eu prefiro eliminar esses caracteres. É o serviço do script abaixo.
Para executar, proceda assim:
./script nome_arquivo
para que o script saiba qual arquivo deve renomear.
Então, a primeira providência é uma checagem se foi passado o argumento através da condição if [ $# != 1 ].
Estando tudo bem, o script começa a renomear. O nome do arquivo fica armazenado na variável $1 e passa a transferir novos valores para as variáveis seguinte que foram usados nomes bem intuitivos.
De com_espaco passa o novo valor para sem_espaco.
sem_espaco para minuscula através do comando tr.
De minuscula para dash que substitui a sequência "_-_" por "-" através do sed.
Do dash para abre_parenteses e em seguida para fecha_parenteses que em ambos os casos usam o sed para substituir os caracteres.
#!/bin/bash
# remove spaces, uppercase to lowercase, replace " - " for "-", replace "(" for "-" and replace ")"for ""
# If file name isn't given show message
if [ $# != 1 ]
then
echo "Argumento: nome_de_arquivo"
exit 1
fi
# grab the file name
com_espaco=`ls -1 "$1"`
# change space for underline
sem_espaco=`ls -1 "$1" | sed 's/ /_/g'`
#echo "$sem_espaco"
mv -v "$com_espaco" "$sem_espaco"
minuscula=$(echo "$sem_espaco" | tr A-Z a-z)
# change upper for lowercase
mv -v "$sem_espaco" "$minuscula"
# change _-_ for -
dash=`echo "$minuscula" | sed 's/_-_/-/'`
mv -v "$minuscula" "$dash"
ls "$dash" | grep "("
if [ $? -eq 0 ]
then
abre_parenteses=`ls "$dash" | sed 's/(/-/g'`
mv -v "$dash" "$abre_parenteses"
fi
ls "$abre_parenteses" | grep ")"
if [ $? -eq 0 ]
then
fecha_parenteses=`ls "$abre_parenteses" | sed 's/)//g'`
mv -v "$abre_parenteses" "$fecha_parenteses"
fi
Podemos automatizar este trabalho se forem muitos arquivos. Se for para os arquivos do mesmo diretório, há uma forma bem simples. Digite a linha de comando no seu terminal:
$ ls -1 | { while read arq; do ./script "$arq"; done; }
Apacerá uma mensagem de erro caso o nome de arquivo não tenha parênteses, mas garanto que no fim tudo estará devidamente renomeado.
É mais ágil quando é dado um duplo clique numa palavra e o terminal seleciona inteira facilitando o trabalho de copiar e colar.
Assinar:
Postar comentários (Atom)
Nenhum comentário:
Postar um comentário