Это можно сделать с помощью Perl-инструмента rename
из приглашения shell
. (Есть другие инструменты с тем же именем, которые могут или не могут сделать это, поэтому будьте осторожны.)
rename 's/(\d+)/sprintf("%03d", $1)/e' *.pdf
Если вы хотите выполнить пробный запуск, чтобы убедиться, что вы не затираете файлы, добавьте в команду переключатель -n
.
примечание
Если вы выполните следующую команду (linux
)
$ file $(readlink -f $(type -p rename))
и у вас есть результат, как
.../rename: Perl script, ASCII text executable
тогда это, кажется, правильный инструмент =)
Кажется, это команда rename
по умолчанию для Ubuntu
.
Чтобы сделать его значением по умолчанию для Debian
и производным, например Ubuntu
:
sudo update-alternatives --set rename /path/to/rename
Пояснения
s///
- это базовое выражение подстановки: s/to_replace/replaced/
, проверьте perldoc perlre
(\d+)
захватить с помощью ()
хотя бы одно целое число: \d
или больше: +
в $1
sprintf("%03d", $1)
sprintf
похоже на printf
, но используется не для печати, а для форматирования строки с тем же синтаксисом. %03d
— для заполнения нулями, а $1
— захваченная строка. Проверить perldoc -f sprintf
- более поздняя функция Perl разрешена из-за модификатора
e
в конце выражения
person
Gilles Quenot
schedule
14.01.2013