Excluir padrão de nomes de arquivos

Excluir padrão de nomes de arquivos

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 fique:

foo - baar.mp3/ogg/...

Tentei algo com "renomear", mas não tenho ideia de qual padrão usar. Acho que deveria ser algo assim: "#-*"

Responder1

Com rename, supondo que a .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 que o seguem. Use-o assim:

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

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

Responder2

Em vez de hackear com substituição de padrão, você pode simplesmente 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 commodelo de saída, por exemplo, youtube-dl -o "%(title)s.%(ext)s" 3CUz4M3M1r8resultará em Ton Steine Scherben - Alles verndert sich.mp4.

Responder3

Usando bashexpansão de parâmetros:

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

  • iniconterá a porção inicial descartando a porção do último -em diante

  • extconterá a extensão, por exemplo 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

Responder4

Roteiro

#!/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 $1"-"$2}' <<< "$file")
        EXTENSION=$( awk -F '.' '{print $2}' <<< "$file")
        mv "$file" ./"$FILENAME.$EXTENSION"

done

Resultados

insira a descrição da imagem aqui

informação relacionada