Como substituir os caracteres codificados em% em um monte de nomes de arquivos pelo sublinhado usando comandos shell?

-1

Eu fiz o download de vários arquivos, alguns dos quais contêm caracteres inválidos codificados para algo como %2C , %2F ...

Eu tentei rename 's/%[0-9][A-Z]/_/g * e rename 's/\%[0-9][A-Z]/_/g * , mas eles não fazem nada. ( Desculpe, minha culpa. rename funciona. Eu introduzo alguns erros de digitação ou algo relacionado a caracteres fullwidth / halfwidth ... ONZ .......... Plz vota para fechar este Q )

Por exemplo, os nomes dos arquivos file,1.pdf , file/2.pdf ... são codificados como file%2C1.pdf , file%2F2.pdf . Quero renomeá-los para file_1.pdf , file_2.pdf , ...

    
por Lee 17.07.2017 / 16:08

2 respostas

0

Você pode usar:

rename 's/%/_/g' *

Primeiro, execute-o usando a opção -n (execução a seco) para garantir que tudo esteja bem:

rename -n 's/%/_/g' *

Para capturar o número também:

rename -n 's/%[0-9]/_/g' *

ou até mesmo usar algo assim para remover todos os caracteres, exceto os alfanuméricos:

$ rename -n 's/[^a-zA-z0-9]/_/g' *
rename(%SOME%2FFOR%, _SOME_2FFOR_)
rename(SOME%2FFOR, SOME_2FFOR)
rename(SOME%2FFOR%, SOME_2FFOR_)
    
por Ravexina 17.07.2017 / 16:41
0

use o script a seguir, copie o script e salve-o em /bin as renamer.sh , em seguida, sempre que desejar fazer qualquer renomeação em arquivos desse tipo, use o comando simples renamer.sh #Input files# ;

#!/bin/bash

for input in $@;
    do 
        inputMod=$( echo "$input" | sed 's/\(%\)/\_/pg' );
        mv "$input" "$inputMod" &> /dev/null; 
        shift; 
    done;
    
por endrias 17.07.2017 / 16:45