AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / ubuntu / Perguntas / 1501336
Accepted
DealTime444
DealTime444
Asked: 2024-01-26 07:30:58 +0800 CST2024-01-26 07:30:58 +0800 CST 2024-01-26 07:30:58 +0800 CST

Renumerar uma lista de arquivos sequenciais, mantendo o restante do nome do arquivo

  • 772

Tenho uma série que não é numerada por temporada, mas por ordem absoluta, indo de 0 a 150 ou mais. Quero renumerar esses arquivos por temporada para que sejam coletados corretamente no Plex. Aqui está um exemplo (primeiros 5 arquivos) da aparência atual da pasta "Temporada 2":

'Show Name - 014 Episode Title 1 [480p] [x265].mkv'
'Show Name - 015 Episode Title 2 [480p] [x265].mkv'
'Show Name - 016 Episode Title 3 [480p] [x265].mkv'
'Show Name - 017 Episode Title 4 [480p] [x265].mkv'
'Show Name - 018 Episode Title 5 [480p] [x265].mkv'

e assim por diante.

Como você pode ver, a temporada começa numerada em 14 em vez de 1. Primeiro eu uso a ferramenta de renomeação do Nautilus para substituir - 0por S02E. Aqui está o que parece agora:

anon@anonpc:~/Downloads/sandbox$ ls
'Show Name S02E14 Episode Title 1 [480p] [x265].mkv'
'Show Name S02E15 Episode Title 2 [480p] [x265].mkv'
'Show Name S02E16 Episode Title 3 [480p] [x265].mkv'
'Show Name S02E17 Episode Title 4 [480p] [x265].mkv'
'Show Name S02E18 Episode Title 5 [480p] [x265].mkv'

Mas preciso que os números dos episódios comecem com 01. Este é o mais próximo que cheguei:

for i in {14..18}; do mv Show\ Name\ S02E$i*.mkv Show\ Name\ S02E$((i-13))*; done

Mas isso não funciona corretamente:

mv: target 'Show Name S02E18 Episode Title 5 [480p] [x265].mkv' is not a directory

Agora fica assim:

anon@anonpc:~/Downloads/sandbox$ ls
'Show Name S02E14 Episode Title 1 [480p] [x265].mkv'
'Show Name S02E2*'
'Show Name S02E3*'
'Show Name S02E4*'
'Show Name S02E5*'

Você pode ver que o primeiro curinga *funcionou para pegar os nomes completos dos arquivos, mas o restante não foi respeitado ao mvrenumerar os arquivos. Além disso, não tenho ideia de por que o primeiro item da lista não foi renomeado.

Gostaria de saber como poderia renumerar os arquivos da maneira descrita acima, mantendo o nome do arquivo original em ambos os lados do número inteiro. Estou usando o Ubuntu 22.04 com o shell bash padrão. Obrigado

command-line
  • 2 2 respostas
  • 292 Views

2 respostas

  • Voted
  1. Best Answer
    Daniel T
    2024-01-26T08:12:22+08:002024-01-26T08:12:22+08:00

    O globing Bash funciona apenas para arquivos existentes. Nesse caso, você pode simplesmente usar a remoção do prefixo Bash ( ${variable#prefix_to_remove}) para especificar o destino de renomeação desejado:

    prefix=Show\ Name\ S02E
    for i in {14..18}; do
      x=("$prefix"$i*.mkv) # Use glob to find the original file with the title
      y="${x#*S02}" # Remove the constant show name part
      y="${y#* }" # Remove the variably unknown part by removing up to the next space
      mv "$x" "$prefix$((i-13)) $y" # Compose the destination
    done
    

    Execução de teste:

    home@daniel-tablet1:~/tmp$ ll
    .rw-rw-r-- 0 home 25 Jan 18:57 'Show Name S02E14 Episode Title 1 [480p] [x265].mkv'
    .rw-rw-r-- 0 home 25 Jan 18:57 'Show Name S02E15 Episode Title 2 [480p] [x265].mkv'
    .rw-rw-r-- 0 home 25 Jan 18:57 'Show Name S02E16 Episode Title 3 [480p] [x265].mkv'
    .rw-rw-r-- 0 home 25 Jan 18:57 'Show Name S02E17 Episode Title 4 [480p] [x265].mkv'
    .rw-rw-r-- 0 home 25 Jan 18:57 'Show Name S02E18 Episode Title 5 [480p] [x265].mkv'
    home@daniel-tablet1:~/tmp$ prefix=Show\ Name\ S02E; for i in {14..18}; do x=("$prefix"$i*.mkv); y="${x#*S02}"; y="${y#* }"; mv "$x" "$prefix$((i-13)) $y"; done
    home@daniel-tablet1:~/tmp$ ll
    .rw-rw-r-- 0 home 25 Jan 18:57 'Show Name S02E1 Episode Title 1 [480p] [x265].mkv'
    .rw-rw-r-- 0 home 25 Jan 18:57 'Show Name S02E2 Episode Title 2 [480p] [x265].mkv'
    .rw-rw-r-- 0 home 25 Jan 18:57 'Show Name S02E3 Episode Title 3 [480p] [x265].mkv'
    .rw-rw-r-- 0 home 25 Jan 18:57 'Show Name S02E4 Episode Title 4 [480p] [x265].mkv'
    .rw-rw-r-- 0 home 25 Jan 18:57 'Show Name S02E5 Episode Title 5 [480p] [x265].mkv'
    
    • 3
  2. Raffa
    2024-01-26T15:41:40+08:002024-01-26T15:41:40+08:00

    Você pode usar a opção de classificação de versão no GNU sortou no GNU lsda renameseguinte forma:

    printf '%s\n' * | sort -V | rename -v -n 'our $i; ++$i; s/([^\d]+)([\d]+)([^\d]+)([\d]+)([^\d]+)([\d]+)(.*\.mkv)/$1$2$3$i$5$6$7/'
    

    ... ou então:

    ls -v | rename -v -n 'our $i; ++$i; s/([^\d]+)([\d]+)([^\d]+)([\d]+)([^\d]+)([\d]+)(.*\.mkv$)/$1$2$3$i$5$6$7/'
    

    ([^\d]+)é um grupo de captura para não numéricos e ([\d]+)é apenas para numéricos e $1, $2, $3... etc. são seus números de referência ... você pode precisar ajustá-los dependendo dos padrões de caracteres em seus nomes de arquivos.

    Observe que eles falharão se seus nomes de arquivos contiverem caracteres de nova linha.

    A -nopção renameé para o modo de simulação (nenhuma renomeação de arquivo real acontece no sistema de arquivos) ... Então, tente isso e se você concordar com a saída, execute novamente novamente sem a -nopção de renamecomo esta demonstração:

    $ ls -v | rename -v -n 'our $i; ++$i; s/([^\d]+)([\d]+)([^\d]+)([\d]+)([^\d]+)([\d]+)(.*\.mkv)/$1$2$3$i$5$6$7/'
    Reading filenames from file handle (GLOB(0x559cb54612b0))
    rename(Show Name S02E9 Episode Title 1 [480p] [x265].mkv, Show Name S02E1 Episode Title 1 [480p] [x265].mkv)
    rename(Show Name S02E10 Episode Title 2 [480p] [x265].mkv, Show Name S02E2 Episode Title 2 [480p] [x265].mkv)
    rename(Show Name S02E11 Episode Title 3 [480p] [x265].mkv, Show Name S02E3 Episode Title 3 [480p] [x265].mkv)
    rename(Show Name S02E12 Episode Title 4 [480p] [x265].mkv, Show Name S02E4 Episode Title 4 [480p] [x265].mkv)
    rename(Show Name S02E16 Episode Title 5 [480p] [x265].mkv, Show Name S02E5 Episode Title 5 [480p] [x265].mkv)
    rename(Show Name S02E17 Episode Title 6 [480p] [x265].mkv, Show Name S02E6 Episode Title 6 [480p] [x265].mkv)
    rename(Show Name S02E20 Episode Title 7 [480p] [x265].mkv, Show Name S02E7 Episode Title 7 [480p] [x265].mkv)
    rename(Show Name S02E21 Episode Title 8 [480p] [x265].mkv, Show Name S02E8 Episode Title 8 [480p] [x265].mkv)
    rename(Show Name S02E50 Episode Title 9 [480p] [x265].mkv, Show Name S02E9 Episode Title 9 [480p] [x265].mkv)
    rename(Show Name S02E100 Episode Title 10 [480p] [x265].mkv, Show Name S02E10 Episode Title 10 [480p] [x265].mkv)
    $
    $
    $ ls -l
    total 0
    -rw-rw-r-- 1 ubuntu ubuntu 0 يناير  26 10:12 'Show Name S02E100 Episode Title 10 [480p] [x265].mkv'
    -rw-rw-r-- 1 ubuntu ubuntu 0 يناير  26 10:10 'Show Name S02E10 Episode Title 2 [480p] [x265].mkv'
    -rw-rw-r-- 1 ubuntu ubuntu 0 يناير  26 10:10 'Show Name S02E11 Episode Title 3 [480p] [x265].mkv'
    -rw-rw-r-- 1 ubuntu ubuntu 0 يناير  26 10:10 'Show Name S02E12 Episode Title 4 [480p] [x265].mkv'
    -rw-rw-r-- 1 ubuntu ubuntu 0 يناير  26 10:10 'Show Name S02E16 Episode Title 5 [480p] [x265].mkv'
    -rw-rw-r-- 1 ubuntu ubuntu 0 يناير  26 10:11 'Show Name S02E17 Episode Title 6 [480p] [x265].mkv'
    -rw-rw-r-- 1 ubuntu ubuntu 0 يناير  26 10:11 'Show Name S02E20 Episode Title 7 [480p] [x265].mkv'
    -rw-rw-r-- 1 ubuntu ubuntu 0 يناير  26 10:11 'Show Name S02E21 Episode Title 8 [480p] [x265].mkv'
    -rw-rw-r-- 1 ubuntu ubuntu 0 يناير  26 10:12 'Show Name S02E50 Episode Title 9 [480p] [x265].mkv'
    -rw-rw-r-- 1 ubuntu ubuntu 0 يناير  26 10:10 'Show Name S02E9 Episode Title 1 [480p] [x265].mkv'
    $
    $
    $ ls -v | rename -v 'our $i; ++$i; s/([^\d]+)([\d]+)([^\d]+)([\d]+)([^\d]+)([\d]+)(.*\.mkv$)/$1$2$3$i$5$6$7/'
    Reading filenames from file handle (GLOB(0x55d02a78c0a0))
    Show Name S02E9 Episode Title 1 [480p] [x265].mkv renamed as Show Name S02E1 Episode Title 1 [480p] [x265].mkv
    Show Name S02E10 Episode Title 2 [480p] [x265].mkv renamed as Show Name S02E2 Episode Title 2 [480p] [x265].mkv
    Show Name S02E11 Episode Title 3 [480p] [x265].mkv renamed as Show Name S02E3 Episode Title 3 [480p] [x265].mkv
    Show Name S02E12 Episode Title 4 [480p] [x265].mkv renamed as Show Name S02E4 Episode Title 4 [480p] [x265].mkv
    Show Name S02E16 Episode Title 5 [480p] [x265].mkv renamed as Show Name S02E5 Episode Title 5 [480p] [x265].mkv
    Show Name S02E17 Episode Title 6 [480p] [x265].mkv renamed as Show Name S02E6 Episode Title 6 [480p] [x265].mkv
    Show Name S02E20 Episode Title 7 [480p] [x265].mkv renamed as Show Name S02E7 Episode Title 7 [480p] [x265].mkv
    Show Name S02E21 Episode Title 8 [480p] [x265].mkv renamed as Show Name S02E8 Episode Title 8 [480p] [x265].mkv
    Show Name S02E50 Episode Title 9 [480p] [x265].mkv renamed as Show Name S02E9 Episode Title 9 [480p] [x265].mkv
    Show Name S02E100 Episode Title 10 [480p] [x265].mkv renamed as Show Name S02E10 Episode Title 10 [480p] [x265].mkv
    $
    $
    $ ls -l
    total 0
    -rw-rw-r-- 1 ubuntu ubuntu 0 يناير  26 10:12 'Show Name S02E10 Episode Title 10 [480p] [x265].mkv'
    -rw-rw-r-- 1 ubuntu ubuntu 0 يناير  26 10:10 'Show Name S02E1 Episode Title 1 [480p] [x265].mkv'
    -rw-rw-r-- 1 ubuntu ubuntu 0 يناير  26 10:10 'Show Name S02E2 Episode Title 2 [480p] [x265].mkv'
    -rw-rw-r-- 1 ubuntu ubuntu 0 يناير  26 10:10 'Show Name S02E3 Episode Title 3 [480p] [x265].mkv'
    -rw-rw-r-- 1 ubuntu ubuntu 0 يناير  26 10:10 'Show Name S02E4 Episode Title 4 [480p] [x265].mkv'
    -rw-rw-r-- 1 ubuntu ubuntu 0 يناير  26 10:10 'Show Name S02E5 Episode Title 5 [480p] [x265].mkv'
    -rw-rw-r-- 1 ubuntu ubuntu 0 يناير  26 10:11 'Show Name S02E6 Episode Title 6 [480p] [x265].mkv'
    -rw-rw-r-- 1 ubuntu ubuntu 0 يناير  26 10:11 'Show Name S02E7 Episode Title 7 [480p] [x265].mkv'
    -rw-rw-r-- 1 ubuntu ubuntu 0 يناير  26 10:11 'Show Name S02E8 Episode Title 8 [480p] [x265].mkv'
    -rw-rw-r-- 1 ubuntu ubuntu 0 يناير  26 10:12 'Show Name S02E9 Episode Title 9 [480p] [x265].mkv'
    

    Isso tem a vantagem de lidar automaticamente com quaisquer sequências de numeração arbitrárias/variantes e ainda renomeá-las para números sequenciais começando 1e com base em seu estado de classificação original.

    • 2

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Existe um comando para listar todos os usuários? Também para adicionar, excluir, modificar usuários, no terminal?

    • 9 respostas
  • Marko Smith

    Como excluir um diretório não vazio no Terminal?

    • 4 respostas
  • Marko Smith

    Como descompactar um arquivo zip do Terminal?

    • 9 respostas
  • Marko Smith

    Como instalo um arquivo .deb por meio da linha de comando?

    • 11 respostas
  • Marko Smith

    Como instalo um arquivo .tar.gz (ou .tar.bz2)?

    • 14 respostas
  • Marko Smith

    Como listar todos os pacotes instalados

    • 24 respostas
  • Martin Hope
    Flimm Como posso usar o docker sem sudo? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    led-Zepp Como faço para salvar a saída do terminal em um arquivo? 2014-02-15 11:49:07 +0800 CST
  • Martin Hope
    ubuntu-nerd Como descompactar um arquivo zip do Terminal? 2011-12-11 20:37:54 +0800 CST
  • Martin Hope
    TheXed Como instalo um arquivo .deb por meio da linha de comando? 2011-05-07 09:40:28 +0800 CST
  • Martin Hope
    Ivan Como listar todos os pacotes instalados 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    David Barry Como determino o tamanho total de um diretório (pasta) na linha de comando? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher "Os seguintes pacotes foram retidos:" Por que e como resolvo isso? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford Como os PPAs podem ser removidos? 2010-07-30 01:09:42 +0800 CST

Hot tag

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve