Предположим, у нас есть эти файлы в каталоге, указанном в порядке их создания, первый из которых самый старый:
a.jpg
b.JPG
c.jpeg
d.tar.gz
e
затем ls -1cr
выводит в точности список выше. Затем вы можете использовать rename
:
ls -1cr | xargs rename -n 's/^[^\.]*(\..*)?$/our $i; sprintf("%03d$1", $i++)/e'
который выводит
rename(a.jpg, 000.jpg)
rename(b.JPG, 001.JPG)
rename(c.jpeg, 002.jpeg)
rename(d.tar.gz, 003.tar.gz)
Use of uninitialized value $1 in concatenation (.) or string at (eval 4) line 1.
rename(e, 004)
Предупреждение «использование неинициализированного значения […]» отображается для файлов без расширения; Вы можете игнорировать это.
Удалите -n
из команды rename
, чтобы фактически применить переименование.
Этот ответ основан на Ответ Люка от апреля 2014 года . Он игнорирует требование Гнутта установить число ведущих нулей в зависимости от общего количества файлов.