Ваш вопрос не очень понятен, но я предполагаю, что у вас есть каталог, содержащий имена файлов, такие как:
- fileA01
- fileA02
- fileB03
- fileB05
- fileB12
- fileC02
- fileD09
- fileE22
Файл, который вы сканируете «с содержимым», содержит список имен, таких как:
И вы хотите, чтобы код нашел запись в каталоге с наибольшим номером версии для соответствующего имени файла:
Вам нужно будет решить, как именно сравниваются версии - я использовал двухзначные номера версий, но вы не указали свои ограничения.
Я бы, вероятно, использовал Perl для этого. Сначала я прочитал весь «файл с содержимым» в память, а затем создал регулярное выражение для распознавания имен файлов - возможно, с включенным определением номера версии. Я бы использовал opendir
, readdir
(и closedir
) для обработки каталога. Для каждой строки я сопоставляю ее с регулярным выражением и определяю, является ли имя самой последней версией любого из искомых файлов. Если это так, я бы записал имя файла в хеш, проиндексированный по имени файла без версии (следовательно, если файл A01 был прочитан первым, то у меня было бы $filelist{fileA} = "fileA01";
за исключением того, что, конечно, и ключ хеша, и полное имя файла были бы в переменных.
Делать это в оболочке будет сложнее. Используя самые мощные функции Bash, это возможно выполнимо; Я бы все еще использовал Perl (или Python, или любой другой язык сценариев).