Como faço para renomear arquivos em lote?

7

Eu tenho algumas centenas de arquivos chamados hortstu01-01-14 e hortstu01-02-14 ... Você entendeu?

Bem, metade dos arquivos são chamados hortstu_01-03-14 e hortstu_01-04-14.

Isso bagunça os arquivos pelo nome e os coloca na ordem que eu preferiria que eles fossem. Então, eu gostaria de renomear os sem o sublinhado para hortstu_

É possível fazer isso em uma operação em lote? Se sim, como?

    
por hortstu 10.04.2014 / 05:40

3 respostas

11

Abra um terminal. Em primeiro lugar, verifique se você tem o perl rename , digitando man rename . Na parte inferior, deve dizer perl v5.18.2 ou similar. (Acho que o Ubuntu sempre envia o perl rename , mas outras distribuições enviam outras versões.)

Se for a versão correta, então cd para o diretório que contém esses arquivos. Então corra

 rename 's/^hortstu/hortstu_/' hortstu[!_]*

Explicação

  • Isso renomeia todos os arquivos que correspondem a hortstu[!_]* . Isso significa arquivos que começam com hortstu e não têm _ a seguir.
  • Irá então renomeá-los
    • localizar ^hortstu (por exemplo, hortstu no início da string)
    • substituindo por hortstu_ .
  • N.B. o formato de hortstu[!_]* é um bash glob . O formato para ^hortstu é uma expressão regular.
por Sparhawk 10.04.2014 / 05:48
4

Ou um Bash one liner navegue até a pasta com os arquivos e, em seguida, execute isso no terminal:

for file in hortsu*;do echo "$file" "${file/_/-}";done;

Basicamente, o que isto faz é para arquivos com o nome 'hortsu' seguido por qualquer caractere '*', ecoando o nome de "$ file" e também o nome do arquivo com todos os sublinhados substituídos por traços. Quando você se sentir confortável com isso, basta substituir echo por cp para copiar os arquivos para o novo nome.

Uma solução pythonic.

Tente isso em um ambiente seguro, talvez copie um ou dois arquivos para uma nova pasta para testar como ela funciona.

Salve o seguinte código no gedit e dê a ele um nome com uma extensão de arquivo '.py', algo como rename_files_in_current_directory.py :

# copy this code into gedit and save it to the directory with the files in it
import os
# for files in the current directory ('.')
for file_names in os.listdir('.'):
    if '_' in file_names:
        # using os.system use cp (copy) to copy file_names to file-names by replacing
        # underscore with dash
        os.system('cp '+file_names+' '+file_names.replace('_','-'))

Certifique-se de que o python esteja instalado. 'sudo apt-get instalar python'

Navegue até a pasta no terminal com o script e os arquivos e, em seguida, execute:

python the_name_given_to_the_python_script.py

Nota:

Você pode excluir os traços nos comandos acima e os scripts removerão os sublinhados.

for file in hortsu*;do cp "$file" "${file/_/}";done;

ou na alteração do script python:

file_names.replace('_','-') a file_names.replace('_','')

    
por jmunsch 10.04.2014 / 05:55
4

Para aqueles que preferem aplicativos gráficos ou apenas a capacidade de visualizar o resultado, você pode querer instalar o Thunar. É o gerenciador de arquivos principal do XFCE; você encontra nos repositórios.

Quando você seleciona vários arquivos no Thunar e os renomeia (via menu de contexto ou F2), você obtém um diálogo elaborado que suporta todos os tipos de operações de renomeação. Você pode resolver seu problema assim:

    
por Raphael 10.04.2014 / 09:15

Tags