Remove uma string aleatória de uma posição particular em nomes de arquivos [duplicados]

1

Eu baixei dezenas de arquivos do youtube usando youtube-dl . Bom recurso, aliás. Depois que eu pesquisei todos eles, percebi que há muitos finais com números aleatórios e letras de casos diferentes. Como video_name_number_of_video_-_the_name_of_episode_part_number-12BUInjas32d1.avi .

$ rename -n 's/-.*avi/.avi/i' *.avi - escolhe o primeiro - e  me deixa com video_name_number_of_video_.avi name.

Existe alguma opção para excluir este mix de letras e números? Eu gostaria de receber ajuda. Além disso, existem apenas 13 dígitos.

Adicionado: Alguém me perguntou exatamente o que eu quero. Então, obviamente, eu quero excluir esses 13 dígitos dos nomes dos arquivos e viver feliz pelo resto da minha vida. Fiz a pergunta real que leva ao meu objetivo em negrito.

    
por Alexander 17.05.2013 / 08:48

3 respostas

0
rename -n 's/-[^-]*\.avi$/.avi/i' ./*

A idéia é combinar - seguido por uma sequência ( * ) de caracteres não traço ( [^-] ) seguida por .avi no final da string ( $ ). -.*avi corresponderia do primeiro - ao último avi .

com zsh :

autoload zmv # in ~/.zshrc as it's a damn useful command

zmv -n '(#i)(*)(-*)(.avi)' '$1$3'

(#i) para globbing insensível a maiúsculas e minúsculas.

    
por 17.05.2013 / 09:20
1

Suponho que esses sejam IDs de vídeo do YouTube. Você pode removê-los usando uma expressão regular como:

s/-[^-.]{13}\.avi$/.avi/

Quebrando isso em suas partes, temos:

  • - - apenas um hífen
  • [^-.]{13} - exatamente 13 caracteres que não são hífens nem pontos
  • \.avi - corresponde simplesmente a ".avi" no nome do arquivo
  • $ anchor no final da string (nome do arquivo)
por 17.05.2013 / 09:20
0

Aqui está uma maneira de fazer isso. Coloque todo o seu nome de arquivo em um arquivo de texto, ou seja, filename.txt:

video_name_number_of_video_-_the_name_of_episode_part_number-12BUInjas32d1.avi video_name_number_of_video_-_the_name_of_episode_part_number-12BUInjas32d2.avi video_name_number_of_video_-_the_name_of_episode_part_number-12BUInjas32d3.avi

Escreva um script:

#/bin/bash -

while IFS= read -r line 
do
    mv -- "$line" "${line%-*}.avi"
done < filename.txt
    
por 17.05.2013 / 09:21

Tags