Como posso remover todos os caracteres após um determinado caractere aparecer duas vezes usando scripts Bash?

0

Eu tenho vários arquivos em um diretório acima de 200 que eu gostaria de renomear removendo todos os outros caracteres incluindo o caractere e o restante depois que ele aparecer duas vezes.

Exemplo:

Um dos arquivos no diretório é

Akouo - Float-H6hQuio26Ww.mp3

Eu gostaria de um script bash que remova o segundo hífen e todos os caracteres após excluir a extensão.

O resultado final deve ser

Akouo - Float.mp3
    
por muru 27.10.2014 / 06:29

2 respostas

1

Para renomear seu exemplo

Akouo - Float-H6hQuio26Ww.mp3

para

Akouo - Float.mp3

use

rename 's/-[^-]*\././' Akouo\ -\ Float-H6hQuio26Ww.mp3

Se você quiser renomear todos os arquivos .mp3 em seu diretório atual com este esquema, use

rename 's/-[^-]*\././' *-*-*.mp3

Você pode adicionar a opção -n para uma execução a seco.

    
por Cyrus 27.10.2014 / 07:20
1

Se assumirmos que todos os arquivos têm dois ou mais hipens e todos os arquivos são mp3, renomear (em python) levaria apenas algumas linhas:

hyps = [i for i in range(len(name)) if name[i] == "-"]
name = name[:hyps[1]]+"mp3"

No entanto, na minha opinião, um script deve (sem informações explícitas que não é necessário) levar em conta, pelo menos, a possibilidade de que o diretório tenha subdiretórios e / ou contenha:

  • arquivos ocultos
  • arquivos sem extensão
  • arquivos com vários tipos de extensões
  • os nomes dos arquivos têm apenas um, mais que dois ou nenhum hipens

para que:

file1-2-3-4-5.txt
a-b-c-d-e
Akouo - Float-H6hQuio26Ww.mp3

torna-se:

file1-2.txt
a-b
Akouo - Float.mp3

O script é um pouco mais extenso:

#!/usr/bin/env python3

import shutil
import os

sourcedir = "/path/to/files"

for root, dirs, files in os.walk(sourcedir):
    for name in files:
        if name.startswith(".") or name.count("-") < 2:
            pass
        else:
            if name.count(".") == 0:
                extension = ""
            else:
                extension = name[name.rfind("."):]
            hyps = [i for i in range(len(name)) if name[i] == "-"]
            newname = name[:hyps[1]].strip()+extension
            shutil.move(root+"/"+name, root+"/"+newname)

Copie o script em um arquivo vazio, defina o caminho para seu diretório e salve-o como rename.py . Execute-o pelo comando:

python3 /path/to/rename.py
    
por Jacob Vlijm 27.10.2014 / 18:07