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