Como podemos renomear um arquivo com ponto e vírgula como parte do nome do arquivo?

1

Eu tentei renomear todos os arquivos com extensão "XLS; 1" para "XLS", mas simplesmente não funcionou.

Eu tentei o seguinte no cygwin no windows xp e eles não funcionam:

mv *.XLS;1 *.XLS

mv *.XLS\;1 *.XLS

mv "*.XLS;1" *.XLS
    
por lamwaiman1988 02.03.2012 / 04:41

3 respostas

4

O problema não é o ponto-e-vírgula, seu segundo exemplo cuidará disso. O problema é que os utilitários Linux / Unix (e, por extensão, o Cygwin) não usam essa instrução para significar "mover todos os arquivos terminados em .XLS;1 para .XLS ", como eu entendo que o Windows faz. Você precisa mover cada arquivo individualmente:

for file in *.XLS\;1; do 
    mv "$file" "${file%;1}"
done

Uma explicação:

Isso leva todos os arquivos terminados em .XLS;1 e os armazena um por vez em uma variável chamada $file . Para cada arquivo, nós dizemos para mover esse $file para um novo nome que criamos cortando ;1 da parte de trás de $file .

Para aqueles que usam zsh, existe um bom utilitário chamado zmv :

zmv '(*).XLS;1" "$1.XLS"

Dependendo da sua configuração, você pode precisar executar autoload zmv primeiro (coloque-o em seu .zshrc também).

    
por 02.03.2012 / 05:36
1

Você pode mover por inode.

Para encontrar o inode

ls -i 

usando o inode que você acabou de encontrar

find . -inum <you just found> -exec mv {} <new name> \;

Isso deve funcionar em um sistema unix. Nenhuma ideia sobre cygwin.

    
por 02.03.2012 / 04:54
1

O Cygwin tem o util-linux pacote que contém rename :

rename ".XLS;1" ".XLS" *.XLS\;1

Ou, se não houver outros pontos-e-vírgulas nos nomes dos arquivos, isso é suficiente:

rename ";1" "" *.XLS\;1
    
por 02.03.2012 / 10:10