Thread Verzeichnis rekursiv auslesen und in Datenbank schreiben
(39 answers)
Opened by Anton at 2012-05-15 08:38
Ich weiß ja nicht, was du alles schon kannst in Perl, welches Wissen du hast.
Was du mit Quotemeinst, verstehe ich nicht. Erkläre das doch bitte näher. Für das rekursive Auslesen von Verzeichnissen gibt es das Modul File::Find und für die Datenbank DBI. Folgendes Beispielskript DateiInDatenbank.pl zeigt, wie ein Verzeichnis eingelesen werden kann und die gefundenen Dateien in eine Datenbank gespeichert werden: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 #!/usr/bin/perl use strict; use warnings; use File::Find; use DBI; # Verzeichnis von Kommandozeile holen my $verzeichnis = shift(@ARGV) || '.'; # Array für die gefundenen Dateien my @dateien; # Routine, die Dateien findet sub wanted { push @dateien,$File::Find::name # schiebe Dateinamen in Array if $File::Find::name ne "." # wenn Datei ist nicht aktuelles Verzeichnis and $File::Find::name ne ".." # Datei ist nicht übergeordenetes Verzeichnis and -f $File::Find::name; # Dateiname ist eine Datei } # Suche nach Dateien starten find(\&wanted, $verzeichnis); my $datenbank = 'meinedateidb'; # Name der MySQL-Datenbank my $tabelle = 'Dateien'; # Name der Tabelle in der DB my $spaltenname = 'Dateiname'; # Name der Spalte in der Tabelle my $dsn = "dbi:mysql:$datenbank"; # zu Datenbank verbinden my $dbh = DBI->connect( $dsn, "LoGiNNuTzErNaMe", "geHeImP455w0r7" ); # SQL vorbereiten my $sth = $dbh->prepare( q{INSERT INTO ? (?) VALUES (?);} ); # in Schleife Dateinamen aus Array holen for my $dateiname (@dateien) { # und SQL ausführen und Daten in Datenbank schreiben $sth->execute($tabelle, $spaltenname, $dateiname); } # von Datenbank abmelden $dbh->disconnect(); 1; Aufrufen kannst du dein Programm dann so: DateiInDatenbank.pl /home/meinverzeichnis/ Wenn bei Datenbankproblemen sofort mit einer Meldung abgebrochen werden soll, dann ersetze im Programm die Zeile Code (perl): (dl
)
my $dbh = DBI->connect( $dsn, "LoGiNNuTzErNaMe", "geHeImP455w0r7" ); Code (perl): (dl
)
my $dbh = DBI->connect( $dsn, "LoGiNNuTzErNaMe", "geHeImP455w0r7", { RaiseError => 1 } ); //EDIT: Test auf Dateinamen in wanted umgestellt Tippfehler in DSN geändert Hinweis auf Abbruch bei erstem DB-Fehler Last edited: 2012-05-15 09:43:05 +0200 (CEST) |