Como remover a codificação URI dos nomes dos arquivos?

7

Eu percebo que isso pode ser uma pergunta bem simples, mas ainda sou muito novo na linha de comando e só tenho uma noção dos comandos básicos.

Eu baixei algumas apresentações de palestras (~ 25 ou mais) da minha universidade, no entanto, ao fazer isso, elas receberam nomes como ...

L2%20Development%20of%20immune%20system.pptx
L4%20Molecular%20Recognition.pdf

Como você pode ver, eles foram baixados com a URL que codifica %20 em vez de um espaço.

Minha pergunta é como renomear em lote todos esses arquivos para que o %20 seja removido e substituído por um espaço?

    
por Ben 20.05.2013 / 23:01

4 respostas

9

No Debian e nos derivados (incluindo o Ubuntu), você pode usar rename , que aplica uma expressão Perl a cada nome de arquivo.

rename 's/%20/ /g' L*
        |  |  | |   |
        |  |  | |   +--- Files to match
        |  |  | +------- globally
        |  |  +--------- with space
        |  +------------ %20
        +--------------- Substitute

Eu consideraria usar sublinhado em vez de espaço - já que isso geralmente torna a vida mais fácil no mundo cli.

Para generalizar para toda codificação de URI:

rename 'use URI::Escape; $_ = uri_unescape $_' *%*
    
por 20.05.2013 / 23:19
7

Você pode usar deurlname de renameutils .

$ ls
L4%20Molecular%20Recognition.pdf
$ deurlname L4%20Molecular%20Recognition.pdf
$ ls
L4 Molecular Recognition.pdf

Eu escrevi um script que permite renomear arquivos em um editor.

Você apenas passa um nome de arquivo ao script e abre o editor com o nome do arquivo nisso. Então você edita o nome do arquivo, escreve e fecha o editor.

$ ls
  L4%20Molecular%20Recognition.pdf
$ viname L4%20Molecular%20Recognition.pdf
  ======================
  L4%20Molecular%20Recognition.pdf█
  ======================

  ======================
  L4-Molecular-Recognition.pdf█
  ======================
  (pretend this is an editor)
$ ls
  L4-Molecular-Recognition.pdf

Eu também escrevi um script que renomeia automaticamente os arquivos para se adequar ao meu esquema de nomenclatura preferido. Quando Eu faço o download de arquivos, a primeira coisa que faço é chamar esse script neles.

$ ls
  L4%20Molecular%20Recognition.pdf
$ nf L4%20Molecular%20Recognition.pdf
  'L4%20Molecular%20Recognition.pdf' renamed to 'l4-molecular-recognition.pdf'
$ ls
  L4-molecular-recognition.pdf

Tenha cuidado com esse script. Pode fazer algumas renomeações bastante dramáticas. Use seu opção dry run ( nf -n ) antes de renomear qualquer arquivo.

    
por 20.05.2013 / 23:49
4

Você pode usar convmv no diretório em que você tem os arquivos:
Para testar qual seria o resultado:

convmv --unescape *%20*

Para realmente renomear os arquivos, adicione --notest :

convmv --unescape --notest *%20*
    
por 20.05.2013 / 23:19
4

Outra alternativa que não depende de ferramentas externas fora do bash:

for old in *; do
    new="${old//+/ }"
    printf -v new '%b' "${new//%/\x}"
    mv -- "$old" "$new"
done
    
por 22.06.2013 / 05:30