В этой статье будет обсуждаться быстрый способ использования Bash для переименования файлов с одного расширения на другое. Для этого мы будем использовать цикл bash, поиск, переименование и команду mv.
Наиболее распространенный способ рекурсивного изменения расширений файлов в каталоге – использовать цикл for в bash. Мы можем предложить пользователю ввести целевой каталог, старое расширение и новое расширение для переименования с помощью сценария bash.
Приступим к сборке сценария. Первым делом нам нужно получить целевой каталог. Для этого мы можем читать как:
#! /bin/bash echo "Введите целевой каталог" read target_dir cd $ target_dir echo "Введите расширение файла для поиска без точки" read old_ext echo "Введите новое расширение файла для переименования без точки" read new_ext echo " $ target_dir, $ old_ext, $ new_ext"
Приведенный выше сценарий запросит у пользователя каталог для обработки, а затем cd в заданный каталог.
Далее мы получаем старое расширение без точки (.); наконец, мы получаем новое расширение для переименования файлов.
Теперь перейдем к обработке файлов. За это; мы можем реализовать простое правило, которое рекурсивно ищет файлы как:
for file in *.$old_ext do mv -v "$file" "${file%.$old_ext}.$new_ext" done;
Приведенный выше цикл for будет искать в переданном каталоге все файлы со старым расширением и переименовывать их в новое расширение.
Чтобы получить подробную информацию, мы используем команду mv с -v. Вы можете подавить этот вывод, заменив флаг -v на –
Теперь давайте проверим сценарий. Окончательный сценарий приведен ниже:
#! /bin/bash echo "Введите целевой каталог" read target_dir cd $ target_dir echo "Введите расширение файла для поиска без точки" read old_ext echo "Введите новое расширение файла для переименования без точки" read new_ext echo " $ target_dir, $ old_ext, $ new_ext " for file in *.$old_ext do mv -v "$file" "${file%.$old_ext}.$new_ext" done;
В этом тесте мы будем использовать каталог /var/log и переименовать все файлы .log в .bak. Вот содержимое каталога перед запуском скрипта.
$ ls l /var/log/ | grep .log
Теперь давайте запустим сценарий.
$ chmod +x extensions.sh $ sudo ./extensions
На скриншоте выше показан сценарий, обрабатывающий файлы и переименовывающий все файлы с .log в .bak.
Поскольку это интерактивный сценарий, он пригодится, когда вы не хотите жестко кодировать расширение.
Ниже приводится содержимое каталога /var/log после сценария.
$ ls -l / var / log / | grep .bak
Чтобы отменить изменения, измените старое расширение на .bak, а новое расширение на .log.
Если вам не хочется работать со сценарием, вы можете использовать инструмент переименования для рекурсивного изменения расширений файлов.
Для установки переименования используйте команду:
$ sudo apt-get install rename -y
После установки вы можете использовать команду переименования как:
# перейти в целевой каталог cd /var/log/ # изменить расширение sudo rename 's/\.log/.bak/' *.log
Чтобы отменить изменения, измените расширение .bak на .log и наоборот.
$ sudo rename 's/\.bak/.log/' *.bak
Вы также можете использовать команду mmv, которая позволяет перемещать несколько файлов одновременно. Установите mmv с помощью команды:
$ sudo apt-get install mmv
Чтобы переименовать файлы с помощью команды mmv:
$ cd /var/log/ mmv "*.csv" "#1.xls"
#1 перемещает файлы в текущий каталог. После того, как вы запустите команду, она переименует все файлы .log в указанное расширение.
В этой статье обсуждались различные методы рекурсивного переименования расширений файлов в определенном каталоге. Однако стоит отметить, что вы можете реализовать стратегии, отличные от тех, которые обсуждаются в этом руководстве.
Спасибо за чтение и не забудьте поделиться!
Как проверить пустой ли файл в bash? Проверка на bash.