shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Remover acentuação nos nomes dos arquivos...


From: Robson - Yahoo
Subject: Remover acentuação nos nomes dos arquivos...
Date: Sun, 18 Dec 2011 09:11:00 -0300
User-agent: Mozilla/5.0 (X11; Linux i686; rv:8.0) Gecko/20111105 Thunderbird/8.0

Bom dia para todos.

Meu nome é Robson, sou de Campina Grande/PB, uso Ubuntu 10.10 e tenho poucos conhecimentos em Shell Script, porisso desejo participar dessa lista. Este é meu primeiro tópico. Agradeço a ajuda de todos.

Estou com um problema, tenho um hd externo de 1 tb, e já tem zilhões de diretórios e arquivos, só que uma bagunça total, muitos arquivos/diretórios em letras maiúscula (ahg que raiva!) e acentuadas, quando vou para o computador do meu irmão (win7) os caracteres acentuados não são reconhecidos. Queria resolver esse problema de uma vez por todas.

Obs.: A partição do hd externo de 1 tb é ntfs, scripts não conseguem ter permissão de execução, tenho de mover o diretório para meu hd ext4 e executar qualquer scripts (não sei se existe soluções para isso).

Preciso de um script que faça uma varredura em todos os diretórios do hd externo, remova todos os acentos tanto dos diretórios como dos arquivos e deixe tudo em letras minúsculas.

Achei no Google uns scripts, que funcionaram não muito bem, vejamos:

#!/bin/bash

for file in *;
do
newname=`echo "$file" | iconv -t 'ascii//TRANSLIT'`

mv "$file" "$newname"

done

--------------------Esse dá um erro, mas remove os acentos. O erro (eu acho), é que ele tenta renomear todos os arquivos, com acento ou não, o erro era mais ou menos assim: "você não pode renomear para si mesmo". Outro problema, é que tenho de mover o script para cada diretório que desejar executar. Tenho zilhões de diretórios, imaginem!! :( e também não retira as letras maiúsculas.

Então, fazendo mais buscas, ontem a noite foi longa, passei a buscar nos sites em inglês (pouco entendimento) e descobri mais dois scripts, mas não sei como unir os dois, e mais, ele coloca um "_" nos espaçamentos, eu até queria colocar um "." (ponto nos espaçamentos, mas não interessa muito não).
Vejamos estes dois scripts:



How can I convert all upper-case file names to lower case?

# tolower - convert file names to lower case

for file in *
do
    [ -f "$file" ] || continue                  # ignore non-existing names
newname=$(echo "$file" | tr '[A-Z]' '[a-z]') # lower-case version of file name
    [ "$file" = "$newname" ] && continue        # nothing to do
[ -f "$newname" ] && continue # do not overwrite existing files
    mv "$file" "$newname"
done

Purists will insist on using

tr '[[:upper:]]' '[[:lower:]]'

in the above code, in case of non-ASCII (e.g. accented) letters in locales which have them.

This technique can also be used to replace all unwanted characters in a file name e.g. with '_' (underscore). The script is the same as above, only the "newname=..." line has changed.

# renamefiles - rename files whose name contain unusual characters
for file in *
do
    [ -f "$file" ] || continue                  # ignore non-existing names
    newname=$(echo "$file" | sed 's/[^a-zA-Z0-9_.]/_/g')
    [ "$file" = "$newname" ] && continue        # nothing to do
[ -f "$newname" ] && continue # do not overwrite existing files
    mv "$file" "$newname"
done

The character class in [] contains all allowed characters; modify it as needed.

-------------------------Não testei estes dois últimos scripts por não ter certeza do que ele vai fazer nos meus arquivos preciosos. Um amigo me indicou este grupo sobre shell script. Só espero que alguém possa me ajudar a resolver meu problema. Vejam que eu pesquisei, não gosto de querer tudo na mão sem ao menos fazer uma pesquisa. Como meu conhecimento é pouco, e meu inglês péssimo, fico sem saber como resolver sozinho.

Mais uma vez eu agradeço a toda equipe desse grupo.

Robson Dantas
address@hidden
address@hidden




reply via email to

[Prev in Thread] Current Thread [Next in Thread]