Remaneja o nome do arquivo, trocando o que é antes e depois de um sublinhado

0

Gostaria de renomear um número de arquivos com a seguinte formatação:

ABCD_20181102.jpg
DEDE_2_20181030.jpg

, ou seja, geralmente 4 letras aleatórias, seguidas por um sublinhado e uma data (ano, mês, dia). Ou 4 letras aleatórias seguidas por um sublinhado, um número aleatório, um sublinhado e depois uma data.

Gostaria de renomear esses arquivos para data (número aleatório, se necessário) e, em seguida, letras aleatórias, como as seguintes:

20181102_ABCD.jpg
20181030_2_DEDE.jpg
    
por badaboum 02.11.2018 / 16:42

3 respostas

0

Você pode usar a expansão Parâmetro para extrair partes das cadeias. # é removido da esquerda, % é removido da direita, o dobro do símbolo remove a correspondência mais longa possível.

#! /bin/bash
for f in ABCD_20181102.jpg DEDE_2_20181030.jpg ; do
    suffix=${f#*.}
    before_underscore=${f%%_*}
    after_underscore=${f#*_}
    after_underscore=${after_underscore%.$suffix}
    if [[ $after_underscore = *_* ]] ; then
        before2=${after_underscore%_*}
        after2=${after_underscore#*_}
        after_underscore="$after2"_"$before2"
    fi
    echo mv "$f" "$after_underscore"_"$before_underscore.$suffix"
done

Basta remover o echo antes de mv depois de verificar se o script faz o que você precisa.

    
por 02.11.2018 / 17:00
0

Se você tiver a renomeação de Larry Wall,

rename -n -e 's/.*_.*/$2_$1/' «file list»

Remova -n para ativar, se a saída mostrar que ele será executado corretamente. (O acima só diz a você o que ele faria, mas não o fará.)

    
por 02.11.2018 / 17:17
0

com mmv :

$ mmv -n '*_*.jpg' '#2_#1.jpg'
ABCD_20181102.jpg -> 20181102_ABCD.jpg
DEDE_2_20181030.jpg -> 2_20181030_DEDE.jpg

(remova o -n quando tiver certeza de que está fazendo a coisa certa).

    
por 02.11.2018 / 21:12