Поскольку имена файлов не содержат специальных символов, включая пробелы, это довольно легко сделать с помощью ls -r
(это -r
для --reverse
, а не -R
для --recursive
).
/tmp/todo$ ls
/tmp/todo$ touch ab bc bd ef
/tmp/todo$ ls
ab bc bd ef
/tmp/todo$ ls -r
ef bd bc ab
/tmp/todo$
Затем вы можете переименовать файлы, используя что-то вроде:
num=1
for file in $(ls -r)
do
mv $file "$(seq --format='%02g' $num $num)${file}"
num=$(( $num + 1 ))
done
Это использует seq
для форматирования числа с использованием двух цифр (2
), дополненных нулями слева (%0
) без десятичных знаков (g
) для общей строки формата %02g
. Вероятно, есть более эффективный способ сделать это, но с таким небольшим количеством файлов я не стал бы заниматься микрооптимизацией.
Это просто перебирает список файлов (в обратном порядке), переименовывает каждый из них по очереди и увеличивает счетчик для каждого переименования.
Окончательный результат:
/tmp/todo$ ls
01ef 02bd 03bc 04ab
/tmp/todo$
Обратите внимание, что вышеперечисленное вполне может развалиться, если в именах файлов есть что-то более необычное, чем простые az, точки и цифры для начала. В частности, я не уверен, насколько хорошо он будет обрабатывать пробелы.