2012-06-25 4 views
16

Мне нужно обработать большое количество файлов в каталоге. Файлы можно разделить на несколько групп, основываясь на именах файлов. Иными словами, имена файлов могут быть сопоставлены с шаблонами, к которым они принадлежат. Так, например, имена, как это:Bash скрипт для итерации файлов в каталоге и в шаблоне соответствует именам файлов

  • ГГГГММДД _ * _ bulk_import.csv
  • ГГГГММДД _ * _ genstats_import.csv
  • YYYYMMDD_ * allstats.csv

и т.д ...

Каждая «группа» имеет другую методологию обработки (т.е. для обработки требуется другая команда).

Я хочу написать Баш скрипт для:

  1. перебрать все файлы CSV в каталоге
  2. определить, какие «группы» файл принадлежит по шаблону соответствия его имя известным узорами (как примеры, приведенные выше)
  3. Вызвать команду на основе определенной группировки.

Я бегу по Ubuntu 10.0.4. Я новичок в bash и буду признателен за фрагмент кода скелета, который поможет мне начать писать этот скрипт.

ответ

34

Самый простой способ - это, вероятно, просто повторить каждую группу отдельно. Эта сторона полностью устраняет проблему синтаксического анализа.

DIRECTORY в любой каталог, который вы хотите найти. По умолчанию . будет искать текущий рабочий каталог.

+0

Ницца и простота. Получает мой голос! –

+0

Был бы простой способ получить «значение» '*' в цикле? – luckydonald

6

Здесь представлена ​​основная итерация по файлам с блоком переключателей для определения типа файла.

#!/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 
Смежные вопросы