Bash script для итерации файлов в каталогах и совпадениях с образцами файлов
Мне нужно обработать большое количество файлов в каталоге. Файлы можно разделить на несколько групп, основываясь на именах файлов. Иными словами, имена файлов могут быть сопоставлены с шаблонами, к которым они принадлежат. Например, имена выглядят следующим образом:
- ГГГГММДД _ * _ bulk_import.csv
- ГГГГММДД _ * _ genstats_import.csv
- YYYYMMDD_ * allstats.csv
и т.д.
Каждая "группа" имеет другую методологию обработки (т.е. для обработки требуется другая команда).
Я хочу написать bash script для:
- Итерировать через все CSV файлы в каталоге
- Определите, к какой группе относится файл, сопоставляющий его имя с известными шаблонами (например, примеры, приведенные выше).
- Вызов команды, основанной на определенной группировке.
Я работаю на Ubuntu 10.0.4. Я новичок в bash и буду благодарен фрагменту кода скелета, который поможет мне начать писать этот script.
Ответы
Ответ 1
Самый простой способ - это, вероятно, просто повторить каждую группу отдельно. Эта сторона полностью устраняет проблему синтаксического анализа.
DIRECTORY=.
for i in $DIRECTORY/YYYYMMDD_*_bulk_import.csv; do
# Process $i
done
for i in $DIRECTORY/YYYYMMDD_*_genstats_import.csv; do
# Process $i
done
for i in $DIRECTORY/YYYYMMDD_*allstats.csv; do
# Process $i
done
Установите DIRECTORY
в любой каталог, который вы хотите найти. По умолчанию .
будет искать текущий рабочий каталог.
Ответ 2
Вот основные итерации по файлам, с блоком switch для определения типа файла.
#!/bin/bash
for f in *; do
case $f in
[0-9]*_bulk_import.csv)
echo $f case 1
;;
[0-9]*_genstats_import.csv)
echo $f case 2
;;
[0-9]*allstats.csv)
echo $f case 3
;;
esac
done