Renomeia e inverte a numeração de uma lista de arquivos

0

No Linux, preferencialmente usando o bash, qual seria a melhor maneira de atingir o objetivo abaixo?

Digamos que eu tenha uma série de arquivos numerados

001.png, 002.png, 003.png

Qual é a melhor maneira de movê-los / renomeá-los na ordem inversa?

Pontos de bônus: Eu tenho uma série de 1.500 arquivos, eu realmente gostaria de reverter a ordem do segundo bloco de 40. Note que as letras não fazem parte do nome. Eu os uso para indicar a singularidade do conteúdo.

001a, 002b, ..., 040c <- leave as is
041a, 042b, ..., 080c <- reverse order of these files
081a, 082b, ..., 120c <- leave as is
121a, 122b, ..., 160a <- reverse order of these files

torna-se:

001a, 002b, ..., 040c
041c, 042b, ..., 080a
081a, 082b, ..., 120c
121c, 122b, ..., 160a
    
por user1611172 12.08.2013 / 10:35

2 respostas

0

A parte "bônus" (atuando apenas nas linhas pares) é uma duplicata, com um conjunto de respostas aqui: link

    
por 12.08.2013 / 10:43
0

Assumindo que os arquivos são nomeados seqüencialmente sem nenhuma parte faltando, e não use nada a não ser os números antes da extensão, isso é puro Bash (desde 3.0).

Execute isso no diretório em que as imagens PNG estão.

# create a temporary directory
mkdir -p ./tmp

# create an array of images and find maximum number
images=(*.png)
max=${#images[*]}

# loop through array keys and subtract the key from maximum number to reverse
for i in "${!images[@]}"; do 
  # rename to the temporary directory, with three-digit zero padding
  mv -- "${images[$i]}" ./tmp/$(printf "%03d.png" $(($max - i)))
done

# move files back and remove temporary directory
mv ./tmp/*.png .
rmdir ./tmp
    
por 12.08.2013 / 10:55