Скрипт для изменения порядкового номера в имени файла - PullRequest
0 голосов
/ 09 октября 2009

Я пишу сценарий оболочки, и я застрял. Требование: я получу файлы с порядковым номером, например, xyz0001abcd.DAT. Я создаю копию этого файла, сохраняя порядковый номер, как abcd000001gfh.DAT. Исходное имя файла использует четыре цифры (до 9999), а скопированное - шесть (до 999999).

Я застрял, когда 9999 приходит в исходном файле. Будет изменен порядковый номер исходного файла, но я хочу, чтобы порядковый номер скопированного файла продолжался. То есть после сопоставления 9999-> 009999 я получу 0001 во второй раз и сопоставлю его с 10000, чтобы скопированный файл мог продолжить свою нумерацию до 999999.

xyz0001abcd.DAT -> abcd000001gfh.DAT
xyz0002abcd.DAT -> abcd000002gfh.DAT
.
.
.
xyz9999abcd.DAT -> abcd009999gfh.DAT   # First sequence wraps around.
xyz0001abcd.DAT -> abcd010000gfh.DAT
xyz0002abcd.DAT -> abcd010001gfh.DAT

Как это можно сделать в форме сценария оболочки?

1 Ответ

0 голосов
/ 09 октября 2009

Вы можете получить порядковый номер вашего исходного файла с помощью:

echo $myFileName | sed 's/^[^0-9]*\(....\).*$/\1/'

Вы можете получить список всех существующих дубликатов файлов, названных в честь вашего исходного файла, но с двухзначным префиксом, как вам требуется:

printf "%s\n" ` `echo $myFileName | sed "s/\([0-9]\)/??\1/" `

Вы можете получить двухзначный префикс дубликата файла с помощью:

echo $myDupFileName | sed 's/^[^0-9]*\(..\).*$/\1/'

И самый большой двузначный префикс из всех дубликатов файлов, названных в честь вашего исходного файла, путем объединения двух предыдущих команд:

printf "%s\n" ` `echo $myFileName | sed "s/\([0-9]\)/??\1/" ` \
| tail -1 \
| sed 's/^[^0-9]*\(..\).*$/\1/'

Я оставляю в качестве упражнения:

  • увеличение этого наибольшего префикса,
  • проверка случая, когда дубликатов еще не существует,
  • создание нового имени из всей собранной информации.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...