Mova os caracteres do início dos nomes de arquivos para o final (antes da extensão) e adicione espaço em branco

6

Eu tenho ~ 2000 arquivos em um esquema de nomenclatura original.

Eu preciso levar todos eles, mover os primeiros 4 caracteres para o final do nome do arquivo antes da extensão e, em seguida, adicionar um espaço em branco antes dos 4 primeiros caracteres.

Basicamente, de:

0123 [UNKNOWN] (Final Fantasy 9) headshot of Freya Crescent {sketch} (ORIGINAL).jpg

para

[UNKNOWN] (Final Fantasy 9) headshot of Freya Crescent {sketch} (ORIGINAL) 0123.jpg
    
por mattdawolf 01.10.2017 / 12:05

2 respostas

8

Isso deve funcionar:

rename -n 's/^([0-9]+) (.*)\.jpg/ .jpg/' /path/to/files/*.jpg

Amostra:

0324 [UNKNOWN] (Final Fantasy 9) headshot of Freya Crescent {sketch} (ORIGINAL).txt
0123 [UNKNOWN] (Final Fantasy 9) headshot of Freya Crescent {sketch} (ORIGINAL).txt
0124 [UNKNOWN] (Final Fantasy 9) headshot of Freya Crescent {sketch} (ORIGINAL).txt

Resultados:

rename(0123 [UNKNOWN] (Final Fantasy 9) headshot of Freya Crescent {sketch} (ORIGINAL).txt,  [UNKNOWN] (Final Fantasy 9) headshot of Freya Crescent {sketch} (ORIGINAL) 0123.txt)
rename(0124 [UNKNOWN] (Final Fantasy 9) headshot of Freya Crescent {sketch} (ORIGINAL).txt,  [UNKNOWN] (Final Fantasy 9) headshot of Freya Crescent {sketch} (ORIGINAL) 0124.txt)
rename(0324 [UNKNOWN] (Final Fantasy 9) headshot of Freya Crescent {sketch} (ORIGINAL).txt,  [UNKNOWN] (Final Fantasy 9) headshot of Freya Crescent {sketch} (ORIGINAL) 0324.txt)

Observação: Testado com arquivos .txt também funcionará em nomes de arquivos jpg

Informação:

([0-9]+) : escolha os números na frente.

(.*) : escolha todas as outras coisas até a extensão do arquivo.

.txt : retorna os grupos capturados com o grupo retornado para numbers colocado próximo à extensão de arquivo jpg e adiciona um espaço antes dos números.

-n : roda sem alterar o nome do arquivo para vermos quais arquivos são alterados e para quais nomes são alterados, remova-o para renomear os arquivos.

    
por George Udosen 01.10.2017 / 12:22
1

Use find e Shell Parameter Expansion :

  1. Se você não tiver rename instalado (mas a maioria provavelmente já está instalado como parte dos pacotes Perl).
  2. Você pode executar em todos ou em padrões de arquivo correspondentes especificados "* .jpg" apenas.
  3. É recursivamente como find nature is.
find . -type f -execdir \
    sh -c 'X="[${1#*[}"; Y="${1%% *}"; 
    echo mv -v "" "${X%.*} ${Y#./}.${X##*.}"' find-sh '{}' \;

Explicações:

  • X="[${1#*[}" (recortado ao primeiro prefixo): remove tudo até o primeiro [ ser visto e acrescenta [ ao padrão.

  • Y="${1%% *}" (recortar para último sufixo): Isso remove tudo até que o último espaço visto comece do final ao início do nome do arquivo; Isso resultará em ./PATTERN , que é ./0123 como exemplo.

  • ${X%.*} (recortado ao primeiro sufixo): remove o sufixo (ex: .jpg ).

  • Y="${Y#./}" (cut-up-primeiro-prefixo): Isso remove ./ da variável Y e resultará em PATTERN somente a partir da segunda etapa, que é 0123 agora.

  • .${X##*.}" (cut-up-last-prefix): Isso remove tudo até o último ponto . visto começar do início ao final do nome do arquivo e anexar um ponto . ; Isso resultará em .PATTERN , que é .jpg agora.

  • -execdir usado aqui para não resultar no caminho do arquivo pelo comando find e é seguro manter o / path / to / files / intacto. Isso produzirá um prompt se você tiver o diretório atual em seu PATH ou se ele contiver caminhos relativos que sejam inseguros < / a>.

  • echo é usado para execução a seco, removê-lo para ter renomeação real.

por αғsнιη 01.10.2017 / 15:23