A parte "bônus" (atuando apenas nas linhas pares) é uma duplicata, com um conjunto de respostas aqui: link
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
A parte "bônus" (atuando apenas nas linhas pares) é uma duplicata, com um conjunto de respostas aqui: link
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
Tags bash batch batch-rename linux