Shell: Неправильно работает rename
У меня есть файл, название которого с пробелами, чтобы заменить пробелы на нижние подчёркивания, я использовал команду rename \ _ /storage/emulated/0/Download/f\ i\ l\ e.py (название файла: f i l e.py), я ожидал, что файл будет называться так: f_i_l_e.py, но заменился один пробел, и теперь название файла: f_i l e.py. Как решить эту проблему?
Ответы (1 шт):
судя по приведённому синтаксису аргументов, вы использовали реализацию программы rename из пакета util-linux. эта реализация, к сожалению, умеет делать лишь однократную замену переданной первым аргументом строки на строку, переданную вторым аргументом.
чтобы с помощью неё произвести несколько замен (одной и той же строки), можно запустить её несколько раз подряд.
существует и иная реализация этой программы, на языке perl (отсюда её дополнительное имя — prename), которой первым аргументом передаётся регулярное выражение. для приведённого в вопросе примера вызов может выглядеть так:
$ prename 's/ /_/g' путь/к/файлам
дополнительным бонусом является понимание этой реализацией программы rename опции -n (--no-act), при наличии которой программа лишь выведет список своих действий (какие имена на какие могут быть изменены), не выполняя при этом реального переименования файлов.