Все ли имена файлов имеют одинаковый формат? В частности, "." + эпоха + ".gz"?
Если это так, вы можете использовать несколько различных маршрутов. Вот один с sed:
$ echo "XXXX-XXX-2011-01-25-3.6.2-record.pb.1296066338.gz" | sed 's/.*\.\([0-9]\+\)\.gz/\1/'
1296066338
Чтобы извлечь эпоху, отправьте ее команде gawk. Что-то вроде:
#!/bin/bash
...
epoch=$( echo "XXXX-XXX-2011-01-25-3.6.2-record.pb.1296066338.gz" | sed 's/.*\.\([0-9]\+\)\.gz/\1/' )
readable_timestamp=$( gawk "BEGIN{print strftime(\"%Y%m%d.%k%M\",${epoch})}" )
Затем используйте любой метод, который хотите заменить числом в имени файла. Вы можете отправить его снова через sed, но вместо сохранения эпохи вы захотите сохранить другие части имени файла.
EDIT:
Для примера, рабочий образец на моей машине:
#!/bin/bash
filename="XXXX-XXX-2011-01-25-3.6.2-record.pb.1296066338.gz"
epoch=$( echo ${filename} | sed 's/.*\.\([0-9]\+\)\.gz/\1/' )
readable_timestamp=$( gawk "BEGIN{print strftime(\"%Y%m%d.%k%M\",${epoch})}" )
new_filename=$( echo ${filename} | sed "s/\(.*\.\)[0-9]\+\(\.gz\)/\1${readable_timestamp}\2/" )
echo ${new_filename}