Рекурсивно заменить символ во всех именах файлов на Linux

Заменить некоторые символы в именах файлов понадобилась после копирования сайта командой wget. Получилось, что символ ?, в именах файлов, заменился на сочетание символов – %3f. Для нас это не подходит, так как ссылки в коде сайта на файлы с вопросительным знаком. Усугубляется это тем, что файлов несколько тысяч.

Нужно редактировать их все и желательно пакетно и рекурсивно.

Подготовка

Если вы используете Debian, нужно установить дополнительный пакет rename, которого нет в официальном репозитории, и при исполнении команды по замене символов вы получите ошибку: bash: rename: command not found

sudo apt install rename

Скрипт замены

Ниже представлено 2 скрипта, которые позволяют производить замену как в названиях файлов, так и в названиях директорий.

Стоит обратить внимание на часть кода: 's\%3f\?\', где:

  • s – неизменяемый параметр;
  • %3f – что ищем в названиях;
  • ? – на что заменяем.

Все эти части разделены обратным слешем. Одинарные кавычки обязательны.

По файлам

Меняем в названии файлов %3f на ?:

find ./ -type f -exec rename -v 's\%3f\?\' {} \;

Чтобы запустить скрипты в «холостую», нужно команду rename запустить с параметром -n.

Запустить без изменений
find ./ -type f -exec rename -v -n 's\%3f\?\' {} \;

По директориям

Меняем в названии директорий %3f на ?:

find ./ -type f -execdir rename -v 's\%3f\?\' {} \;

Ниже код для запуска для проверки.

Запустить без изменений
find ./ -type f -execdir rename -v -n 's\%3f\?\' {} \;

Заключение

Во время работы оба скрипта будут выводить: «как было» и «как стало».

Теги:

Комментарии






Интересное
Важное событие IT
Создание Cisco
Создание Cisco
Узнать подробнее
Оглавление
  1. Подготовка
  2. Скрипт замены
    1. По файлам
    2. По директориям
  3. Заключение