Como renomear todos os arquivos em pastas com padrão

3

Eu tenho um monte de arquivos como:

bla.super.lol.S01E03.omg.bbq.mp4
bla.super.lol.S01E04.omg.bbq.mp4
bla.super.lol.s03e12.omg.bbq.mp4

Eu preciso renomeá-los como:

s01e03.mp4
s01e04.mp4
s03e12.mp4

Eu tentei fazer isso com for file in *; do mv $file ${file%%\.omg*}; done , mas remove apenas parte depois de S01E01, não antes disso então por favor, ajude

    
por Ya_34 28.04.2016 / 20:43

3 respostas

8

com rename ( prename ):

rename -n 's/^bla\.super\.lol\.[sS](\d+)[eE](\d+)\..*(\.mp4$)/se/' *.mp4

-n executa a execução a seco, se você estiver satisfeito com a renomeação em potencial, basta remover -n para permitir que o renamimento real ocorra:

rename 's/^bla\.super\.lol\.[sS](\d+)[eE](\d+)\..*(\.mp4$)/se/' *.mp4

Exemplo:

$ ls -1
bla.super.lol.S01E03.omg.bbq.mp4
bla.super.lol.S01E04.omg.bbq.mp4
bla.super.lol.s03e12.omg.bbq.mp4

$ rename -n 's/^bla\.super\.lol\.[sS](\d+)[eE](\d+)\..*(\.mp4$)/se/' *.mp4
bla.super.lol.S01E03.omg.bbq.mp4 renamed as s01e03.mp4
bla.super.lol.S01E04.omg.bbq.mp4 renamed as s01e04.mp4
bla.super.lol.s03e12.omg.bbq.mp4 renamed as s03e12.mp4
    
por heemayl 28.04.2016 / 21:02
2
#!/bin/bash
IFS="\n"                               # Handle files with spaces in the names
for file in *.mp4; do
    newfile="${file/bla.super.lol./}"  # Strip the prefix you don't want
    newfile="${newfile/S/s}"           # Change the first S to an s
    newfile="${newfile/E/e}"           # Change the first E to an e
    newfile="${newfile.%omg.bbq*}"     # Strip the suffix you don't want
    newfile="${newfile}.mp4}"          # Tack on the file extension again
done
if [[ "$file" == "$newfile" ]]; then
    echo "Not renaming $file - no change decreed."
elif [[ -f "$newfile" ]]; then
    echo "Not renaming $file - $newfile already exists."
else
    mv -- "$file" "$newfile"           # Make the change
fi
    
por DopeGhoti 28.04.2016 / 20:56
1

Mantenha a simplicidade ..

rename 's/.*\.(\w+)\.omg\..*mp4$/\L.mp4/' *.mp4

Exemplo:

$ echo 'bla.super.lol.S01E03.omg.bbq.mp4' | perl -pe 's/.*\.(\w+)\.omg\..*mp4$/\L.mp4/'
s01e03.mp4
    
por Avinash Raj 29.04.2016 / 09:34