Как переименовать многие файлы из любых последовательных имен файлов?

У меня есть каталог с 8000 изображениями. Они имеют множество имен файлов и имеют тип jpeg или png.

Я хочу переименовать их в:

pic00001.png pic00002.jpg 

Я не возражаю, если я в конечном итоге делаю pngs за один проход, а jpegs в другом, заканчивая двумя слегка перекрывающимися наборами – pic00001.png, pic00002.png и pic00001.jpeg, pic00002.jpeg

Текущие вопросы по переименованию SE охватывают массовое переименование, если вы берете существующее имя файла и добавляете или удаляете статическую информацию. Я этого не делаю. Я заменяю полное имя файла на увеличивающееся число.

One Solution collect form web for “Как переименовать многие файлы из любых последовательных имен файлов?”

Вы можете сделать это с помощью цикла оболочки, например:

 for f in *.jpeg *.png do printf "mv '%s' pic%05d.%s \n" "$f" $((++c)) "${f##*.}" done | sh 

Эта программа создает одну последовательность с одним запуском серийного номера и сохраняет исходное расширение файла.

Примечание. Метод создания команд или командных последовательностей и компоновка результата в оболочке является стандартным шаблоном кодирования. Вы можете запустить программу сначала без конечного канала в sh чтобы проверить, подходят ли созданные команды, и если все выглядит нормально, добавьте последний канал. (В отличие от временного добавления echo (как это часто видно) метод pipe-to-shell создает согласованный вывод.)

Но обратите внимание (как выразился Гилл), что в данном случае имя файла, содержащего одинарные кавычки, создаст для соответствующего имени файла неправильный результат. Если вам не нужен предварительный контроль, вы можете напрямую выполнять команды, как в:

 for f in *.jpeg *.png do ((++c)) new_f=$( printf "pic%05d.%s" $c "${f##*.}" ) mv "${f}" "${new_f}" done 

(Для параноидальных: Конечно, всегда могут быть ситуации, когда эти решения также не работают должным образом, например, если некоторые из существующих файлов уже соответствуют формату имени целевого файла, в этом случае вы, например, создадите / переместите файлы в новый временный каталог, чтобы избежать повреждения соответствующих файлов.)

  • Выполнение команд с помощью сценария ssh и оболочки с использованием переменных на удаленной машине
  • $ HOME / bin dir не находится в $ PATH
  • Как я могу передать успех (или отказ) команды переменной?
  • Сетевой ввод-вывод и дисковый ввод-вывод без установки каких-либо или использования сторонних библиотек
  • Вывод нескольких строк из нескольких файлов
  • В чем разница между сценарием sh и sh <script
  • whiptail или диалог
  • Найти команду, которая не работает в сценарии оболочки
  • Как распечатать каждую другую строку на мониторе
  • Определить набор значений для переменной в сценарии оболочки
  • Фильтры поиска LDAP с использованием BASH
  • Замена параметра скрипта скрипта
  • Linux и Unix - лучшая ОС в мире.