Exclui o padrão dos nomes dos arquivos [duplicados]

1

Eu baixei alguns arquivos com o youtube-dl. O nome é sempre assim

foo - baar -PSUHDUWHDAIHDWU.ogg/mp3/...

Como posso remover essas letras aleatórias (cortar o último '- *') no final de todos os arquivos de uma pasta para que o nome seja:

foo - baar.mp3/ogg/...

Eu tentei algo com "renomear", mas não tenho idead, que padrão usar. Eu acho que deveria ser algo assim: " # - *"

    
por Nick 20.05.2015 / 23:01

5 respostas

2

Com rename , supondo que . apareça apenas no final do nome do arquivo da extensão, você pode usar a seguinte expressão:

s/-[^-]*\././

Isso substitui um hífen seguido por caracteres diferentes de um hífen até um . , com . , excluindo efetivamente o último hífen e os caracteres após ele. Use assim:

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

Se os nomes alterados parecerem perfeitos, execute sem -n .

    
por muru 20.05.2015 / 23:50
2

Em vez de hackear com o padrão de substituição, você pode dizer ao youtube-dl para não incluir essas letras aleatórias (na verdade, é um ID de vídeo) no nome do arquivo final. Isso pode ser feito com o modelo de saída , por exemplo youtube-dl -o "%(title)s.%(ext)s" 3CUz4M3M1r8 resultará em Ton Steine Scherben - Alles verndert sich.mp4 .

    
por dstftw 21.05.2015 / 18:50
1

Usando a expansão do parâmetro bash :

#!/bin/bash
shopt -s extglob
for file in *(*mp3|*ogg); do
    ini="${file%-*}"
    ext="${file##*.}"
    mv "$file" "${ini}.${ext}"
done
  • Aqui, usamos o recurso extglob e de expansão de parâmetro de bash .

  • ini conterá a parte inicial descartando a parte do último - em diante

  • ext conterá a extensão, por ex. ogg , mp3

Teste:

$ ls
scr.sh                                                      Ton Steine Scherben - Ich will nicht werden, was mein Alter ist-WpLfJZvnWSw.ogg
Ton Steine Scherben - Alles verändert sich-3CUz4M3M1r8.ogg  Ton Steine Scherben - Keine Macht für Niemand-XtMPGhXnzWE.mp3
Ton Steine Scherben - Der Traum ist aus-WYZCovq71XE.ogg     Ton Steine Scherben - Komm schlaf bei mir-Nr9V_UH04eA.mp3
Ton Steine Scherben - Feierabend-BopYtPtjlkI.ogg

$ bash scr.sh 

$ ls
scr.sh                                          Ton Steine Scherben - Ich will nicht werden, was mein Alter ist.ogg
Ton Steine Scherben - Alles verändert sich.ogg  Ton Steine Scherben - Keine Macht für Niemand.mp3
Ton Steine Scherben - Der Traum ist aus.ogg     Ton Steine Scherben - Komm schlaf bei mir.mp3
Ton Steine Scherben - Feierabend.ogg
    
por heemayl 20.05.2015 / 23:53
0

Com base no padrão fornecido, você pode tentar isto:

perl-rename "s/\-[a-zA-Z0-9]*\././g" *

Ele usa um regexp perl para substituir letras maiúsculas depois de um "-" e antes de um "." com apenas um "." em qualquer arquivo. o final "*" diz ao comando para incluir todos os arquivos no diretório atual.

Tem que ser executado dentro do diretório que você tem seus arquivos.

    
por Stunts 20.05.2015 / 23:48
0

Script

#!/bin/bash
# Author : Serg Kolo
# Description: script for renaming files 
# for http://askubuntu.com/q/626258/295286

for file in *; do

        FILENAME=$( awk -F '-' '{gsub(" ","");print "-"}' <<< "$file")
        EXTENSION=$( awk -F '.' '{print }' <<< "$file")
        mv "$file" ./"$FILENAME.$EXTENSION"

done

Resultados

    
por Sergiy Kolodyazhnyy 20.05.2015 / 23:41