В Linux, предпочтительно с использованием bash, что будет лучшим способом для достижения цели ниже?

Скажем, у меня есть серия пронумерованных файлов

001.png, 002.png, 003.png

Каков наилучший способ переместить / переименовать их в обратном порядке?

Бонусные баллы: у меня есть серия из 1500 файлов, я бы хотел изменить порядок второго блока из 40. Обратите внимание, что буквы не являются частью имени. Я использую их для обозначения уникальности контента.

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

будет выглядеть так:

001a, 002b, ..., 040c
041c, 042b, ..., 080a
081a, 082b, ..., 120c
121c, 122b, ..., 160a

2 ответа2

0

"Бонусная" часть (действующая только по четным линиям) является дубликатом с одним набором ответов здесь: https://unix.stackexchange.com/questions/26723/print-odd-numbered-lines-print-even -numbered линий

0

Предполагая, что файлы названы последовательно без пропущенных частей, и не используйте ничего, кроме чисел перед расширением, это в чистом Bash (начиная с версии 3.0).

Запустите это из каталога, в котором находятся изображения PNG.

# 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .