Сохраните этот сценарий:
#!/bin/bash
NUM=0
NUMBER_LENGTH=4
cd $1;
ls . -1 | sort | while read file; do
NUM=$(( $NUM + 1 ));
PREFIX=$NUM;
while [ ${#PREFIX} != $NUMBER_LENGTH ]; do
PREFIX="0${PREFIX}";
done;
NEW_NAME=$PREFIX.`echo $file | sed 's|[^.]\+\.\([\A-Za-z0-9]\+\)|\1|g'`;
mv "$file" "$NEW_NAME";
done
и выполните его как:
./_scriptname_ _dirWhereYourStuffIs_
ПРОТЕСТ: не помещайте сценарий в тот же dir, где Ваш материал, потому что сам сценарий был бы переименован.
Если Вы достаточно безумны, можно сделать все это в строке (не используя сценарий):
NUM=0; NUMBER_LENGTH=4; ls . -1 | sort | while read file; do NUM=$(( $NUM + 1 )); PREFIX=$NUM; while [ ${#PREFIX} != $NUMBER_LENGTH ]; do PREFIX="0${PREFIX}"; done; NEW_NAME=$PREFIX.`echo $file | sed 's|[^.]\+\.\([\A-Za-z0-9]\+\)|\1|g'`; mv "$file" "$NEW_NAME"; done
ПРОТЕСТ № 2: для этой одной строки я предполагаю, что Вы используете Bash