У нас есть ряд отчетов о заданиях из системы, которые сохраняют на нашем Linux-сервере префикс O*****.TXT. В файле находится идентификатор процесса.
Какой скрипт можно запустить для поиска всех файлов 'O****.TXT в каталоге и переименовать каждый файл с идентификатором процесса из каждого файла? например:
Найти OAAJWNZN.TXT для ProcID:0000019324, переименовать OAAJWNZN.TXT в 0000019324.TXT.
Затем, как только этот файл будет переименован, сценарий переместится на следующий файл в и делает то же самое.
Вы можете использовать for, rename и sed в каталоге, где находятся файлы:
for i in O*.TXT; do rename -n "s/.*\.TXT/$(sed -nr 's/.*( |^)ProcID:([0-9]+)( |$).*/\2/p' "$i").TXT/" "$i"; done
Удалить -n после rename после тестирования, чтобы фактически переименовать файлы
. Сделайте cp вместо mv, если вы хотите сохранить старые файлы, или вы не уверены.
for file in 0*.TXT; do
procid=$(grep -Po "(?<=ProcID:)[0-9]*" "$file");
new_filename="/outputpath/${procid}.TXT";
if [ ! -f "$newfilename" ]; then
mv "$file" "$new_filename";
fi;
done