Разделите файлы на группы по части их имени и заархивируйте их - PullRequest
0 голосов
/ 04 июля 2019

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

Part1_Part2_Part3_Part4.csv

, например:

1010 * AAA_XXX_AAA001_20991231.csv * AAA_XXX_AAA001_20991131.csv
1012 * AAA_XXX_AAA002_20991031.csv * AAA_XXX_AAA002_20990931.csv
BBB_XXX_BBB001_20991231.csv
BBB_XXX_BBB001_20991131.csv
BBB_XXX_BBB002_20991031.csv
BBB_XXX_BBB002_20990931.csv

Мне нужно создать сценарий оболочки, который группирует их на основе подстрок Part1 и Part3 и создает zip-архив, используя соглашение об именах, например:

Part1_Part3.zip

Например, zip-файл с именем

"AAA_AAA001.zip" должен содержать файлы:

AAA_XXX_AAA001_20991231.csv
AAA_XXX_AAA001_20991132.cs *

«AAA_AAA002.zip» должен содержать файлы:

AAA_XXX_AAA002_20991231.csv
AAA_XXX_AAA002_20991131.csv

То же, что и выше с "BBB_BBBXXX.zip".

Структура файлов фиксирована.Part1 всегда в начале, а Part3 всегда следует за вторым подчеркиванием.Количество символов может варьироваться.

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

Любая помощь очень ценится.

1 Ответ

0 голосов
/ 04 июля 2019

Сначала получите все комбинации part1-part3 и составьте уникальный список.Вы можете добавить свои собственные опции к zip, я думаю, что вы хотите что-то вроде

ls *_*_*.csv | cut -d_ -f1,3 | sort -u| while IFS=_ read -r part1 part3; do 
   echo "zipfile ${part1}_${part3}.zip"
   echo "Files ${part1}_*_${part3}_*.csv"
   zip ${part1}_${part3}.zip ${part1}_*_${part3}_*.csv
done

Редактировать: Исправлена ​​опечатка, как предложено в комментарии.

...