Получить список файлов с частичным совпадением по диапазону номеров в bash 4 - PullRequest
0 голосов
/ 05 апреля 2020

У меня есть большое количество файлов в следующем формате:

tile_4665_411_1000575_w10#aa.til  tile_6535_366_1100695_w30#ab.til
tile_4665_411_1000576_w10#aa.til  tile_6535_366_1100712_w30#aa.til
tile_4665_411_1001046_w10#aa.til  tile_6535_366_1100736_w25#aa.til
tile_4665_411_1001097_w10#aa.til  tile_6535_366_1100742_w25#aa.til
tile_4665_411_1001120_w10#aa.til  tile_6535_366_1100742_w25#ab.til
tile_4665_411_1001192_w10#aa.til  tile_6535_366_1100742_w25#ac.til
tile_4665_411_1100653_w15#aa.til  tile_6535_366_1100742_w25#ad.til
tile_4666_411_1000468_w10#aa.til  tile_6535_366_1100742_w25#ae.til
tile_4666_411_1000510_w10#aa.til  tile_6535_366_1100742_w25#af.til

и так далее. Это результаты разделения больших файлов на файлы меньшего размера. Отсюда и соглашение об именах (tile_ largeFile _ smallFile _uniqueidentifier_weight # split.til). Каждый отдельный smallFile вложен в largeFile (представьте, что нужно разделить квадрат на квадраты, каждый из которых имеет одинаковый размер).

Следующий шаг - cat все отдельные файлы, принадлежащие largeFile_smallFile, в один файл следующим образом:

tile_ largeFile _ smallFile .tile

например, cat tile_4665_411_*.til > tile_4665_411.tile

У нас есть место для потенциала 6700 smallFiles , хотя около 30% из них никогда не создаются , В данный момент мы запускаем задание для каждого потенциального small_File и возвращаемся из процесса, если такого файла нет.

numberofFiles=6700
listOfTiles==$(ls tile_*.til)

А затем l oop от 1 до 6700 и захват соответствующего шаблона:

PATTERN=$(ls tile_*_$COUNTER_*.til
#split filenames to get largeFile
cat $PATTERN > tile_largeFile_$COUNTER.tile

Хотя этот подход работает, он явно не изящен и может снизить наш приоритет для выполнение (из-за количества процессов, которые мы запрашиваем и т. д. c.).

Есть ли более разумный способ получить список отдельных маленьких фрагментов, которые на самом деле находятся в папке? Т.е. что-то вроде:

numberofFiles=$(ls tile_*_{1..6700}_*.til) #unique smallFile numbers that are (potentially) between 1 and 6700

В некотором смысле, я бы хотел получить уникальное количество smallFile Id'S из очень большого списка файлов.

Любая помощь очень важна!

Приветствия

...