2012-06-25 6 views
16

Ich muss eine große Anzahl von Dateien in einem Verzeichnis verarbeiten. Die Dateien können basierend auf den Dateinamen in mehrere Gruppen unterteilt werden. Das heißt, die Dateinamen können musterangepasst sein, zu welcher "Gruppe" sie gehören. Zum Beispiel sind die Namen wie folgt aus:Bash-Skript zum Iterieren von Dateien im Verzeichnis und Muster Übereinstimmung Dateinamen

  • JJJJMMTT _ * _ bulk_import.csv
  • JJJJMMTT _ * _ genstats_import.csv
  • YYYYMMDD_ * allstats.csv

etc ...

Jede 'Gruppe' hat eine andere Verarbeitungsmethode (dh ein anderer Befehl wird zur Verarbeitung aufgerufen).

Ich mag einen Bash-Skript schreiben:

  1. Iterate durch alle CSV-Dateien im Verzeichnis
  2. Bestimmen Sie die ‚Gruppe‘ eine Datei Pattern-Matching seine Namen bekannte Muster von gehört (wie die Beispiele, die ich oben angegeben habe)
  3. Aufruf eines Befehls basierend auf der ermittelten Gruppierung.

Ich bin auf Ubuntu 10.0.4 ausgeführt. Ich bin neu in bash und würde mich über das Skelett-Code-Snippet freuen, das mir beim Schreiben dieses Skripts helfen wird.

Antwort

34

Der einfachste Weg ist wahrscheinlich, jede Gruppe einzeln zu iterieren. Diese Seite führt das Parsing-Problem vollständig aus.

Setzen Sie DIRECTORY in das Verzeichnis, das Sie durchsuchen möchten. Der Standard . durchsucht das aktuelle Arbeitsverzeichnis.

+0

Schön und einfach. Bekommt meine Stimme! –

+0

Würde es einen einfachen Weg geben, den "Wert" von '*' in der Schleife zu bekommen? – luckydonald

6

Hier ist eine grundlegende Iteration über Dateien, mit Switch-Block, um den Dateityp zu bestimmen.

#!/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 
Verwandte Themen