Bash-скрипт для добавления двух нулей в начале имен файлов [закрыто]

Вопрос или проблема

У меня есть файлы с двумя номерами в середине каждого файла:

FileName_46_01.wav
FileName_6_15.wav
FileName_3_7.wav
FileName_15_22.wav

и так далее.

Мне нужно переименовать файлы с помощью оболочки, чтобы добавить нули в начале, если это необходимо:

FileName_46_01.wav
FileName_06_15.wav
FileName_03_07.wav
FileName_15_22.wav

Вот так, используя команду Perl rename:

rename -n 's/\d+/sprintf "%.2d", $&/ge' ./*.wav

Удалите -n, если довольны результатом (режим пробного запуска).

Ответ или решение

Скрипт Bash для добавления двух ведущих нулей в имена файлов

В данной статье мы обсудим полезный скрипт на языке Bash, который позволит вам переименовать файлы, добавляя ведущие нули в числовые части их имен. Это может быть полезно в ситуациях, когда порядок сортировки файлов важен, и необходимо обеспечить единообразие в написании чисел.

Пример задачи

Рассмотрим следующий набор файлов:

FileName_46_01.wav
FileName_6_15.wav
FileName_3_7.wav
FileName_15_22.wav

Наша цель — изменить их имена следующим образом:

FileName_46_01.wav
FileName_06_15.wav
FileName_03_07.wav
FileName_15_22.wav

Решение с использованием Bash

Для достижения этой цели можно использовать следующий скрипт на Bash:

#!/bin/bash

# Проход по всем файлам с расширением .wav
for file in *.wav; do
    # Извлекаем базовое имя файла без расширения
    base="${file%.wav}"

    # Используем регулярное выражение для поиска чисел и добавления ведущих нулей
    new_name=$(echo "$base" | sed -E 's/_([0-9]+)/_$(printf "%02d" \1)/g; s/_([0-9]{2})$/_&/')

    # Добавляем обратно расширение
    new_name="$new_name.wav"

    # Переименовываем файл
    if [[ "$file" != "$new_name" ]]; then
        mv "$file" "$new_name"
        echo "Переименован: '$file' → '$new_name'"
    fi
done

Пояснение скрипта

  1. Цикл по файлам: Мы используем цикл for, чтобы пройтись по всем файлам с расширением .wav.

  2. Извлечение базового имени: С помощью конструкции ${file%.wav} мы удаляем расширение, чтобы работать только с основным именем файла.

  3. Регулярное выражение: Используем sed с флагом -E для обработки регулярных выражений. Мы ищем шаблон с числом, предваряемым символом подчеркивания _. При помощи printf "%02d" мы добавляем ведущие нули к числам, состоящим из одной цифры.

  4. Проверка и переименование: Если имя нового файла отличается от исходного, файл переименовывается при помощи команды mv, и об этом выводится сообщение.

Запуск скрипта

  1. Сохраните этот код в файл, например rename_files.sh.
  2. Дайте файлу права на выполнение: chmod +x rename_files.sh.
  3. Запустите скрипт в каталоге с вашими .wav файлами: ./rename_files.sh.

Заключение

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

Если у вас есть вопросы или требуется дополнительная информация, не стесняйтесь обращаться!

Оцените материал
Добавить комментарий

Капча загружается...