Assumindo duas coisas:
- Você tem acesso a uma versão razoavelmente moderna do GNU bash, ou um shell compatível
- A parte do identificador é sempre
yyyy-nnnn-
seguido por um ou mais dígitos (em sequência) seguidos por outra coisa
você pode usar a manipulação de string do bash e a expansão de curingas do shell para realizar o que deseja .
Execute isso em um diretório no qual os arquivos 1996-0011-1 BEG Foo Bar Foo Bar.jpg
, 1996-0011-2 BEG Foo Bar Foo Bar.jpg
, 2001-0006-1 MEF FooBar.jpg
e 2001-0006-2 MEF FooBar.jpg
já existam.
$ ls -1
1996-0011-1 BEG Foo Bar Foo Bar.jpg
1996-0011-2 BEG Foo Bar Foo Bar.jpg
2001-0006-1 MEF FooBar.jpg
2001-0006-2 MEF FooBar.jpg
$ mkdir old
$ for filename in *.jpg; do
> test -f "$filename" && convert +append ${filename:0:10}* "${filename:0:9} ${filename:12}" && mv ${filename:0:10}* old/; done
$ ls -1
1996-0011 BEG Foo Bar Foo Bar.jpg
2001-0006 MEF FooBar.jpg
old/
$ rm -r old
$
A maneira como isso funciona é, para cada arquivo .jpg no diretório:
- teste se o arquivo existe e é um arquivo regular
- se o arquivo existir, execute
convert
, passando os dez primeiros caracteres do nome do arquivo (começando na posição de caractere 0, extraindo 10 caracteres) para exibir a expansão de curingas como parâmetros a serem convertidos, seguido pelo primeiro nove caracteres do nome do arquivo seguido por um espaço seguido por tudo a partir do 12º caractere em diante (você pode ajustar essa parte para obter o tipo de nome do arquivo de saída desejado; certifique-se de fazer o ajuste correspondente à invocaçãomv
) - se
convert
foi executado e foi bem-sucedido, mova todos os arquivos de entrada para um diretório separado, para removê-los do caminho
No final, você terá os arquivos de saída no diretório atual e todos os arquivos de entrada serão movidos para o diretório denominado old
. Certifique-se de testar o snippet acima em dados não críticos primeiro.