schicker kleiner perl einzeiler

belubaba

belubaba

Tripel-As
Ich habe diesmal kein Problem sondern eine Bitte ;)

Die Aufgabenstellung ist folgende:

Ich habe eine Inidatei (verzeichnis.ini) die pro Zeile einen Eintrag für ein anzulegendes Verzeichnis enthält

cat verzeichnis.ini
verzeichnis1
verzeichnis2
verzeichnis3
...

Ich habe ein Verzeichnis (/meinAltesVerzeichnis) das beliebig viele Dateien aber keine Unterverzeichnisse enthält.

Jetzt möchte ich die verzeichnis.ini auslesen und unter /meinNeuesVerzeichnis alle darin aufgezählten Verzeichnisse anlegen.

Danach alle Dateien aus /meinAltesVerzeichnis in jedes dieser neu angelegten Verzeichnissen kopieren.

Mit Shell Skript könnte ich das problemlos umsetzten. Leider habe ich keinen blassen Schimmer von perl :).

Kann mir einer einen schicken kleinen Perl Einzeiler für das Problem schreiben wenn Ihm gerade langweilig ist? :)

b.
 
Also einen Einzeiler daraus zu machen, ist für mich a bissel schwierig ;)

Wenns auch ein Mehrzeiler tut:

Code:
#!/usr/bin/perl

use strict;
use File::Copy;

my $ininame = "verzeichnis.ini";
my $olddir = "/meinAltesVerzeichnis";
my $newdir = "/meinNeuesVerzeichnis";
my $filename;

open FILE, "<$ininame";
opendir OLDDIR, $olddir;
foreach (<FILE>) {
	chomp $_;
	mkdir "$newdir/$_";
	while ($filename = readdir OLDDIR) {
		copy("$olddir/$filename", "$newdir/$_/$filename") if $filename !~ /\.$/
	}
        rewinddir OLDDIR
}
closedir OLDDIR;
close FILE

Gruss, Phorus
 
Zuletzt bearbeitet:
Schäm dich , das gillt nicht , er wollte nen Einzeiler !

Zurück ans Zeichenbrett marsch marsch :devil:
 
Ok, Du hast es nicht anders gewollt :devil:

Code:
perl -e 'use strict;' -e 'use File::Copy;' -e 'my $ininame = "verzeichnis.ini";' -e 'my $olddir = "/meinAltesVerzeichnis";' -e 'my $newdirbase = "/meinNeuesVerzeichnis";' -e 'my $filename;' -e 'open FILE, "<$ininame";' -e 'foreach (<FILE>) {' -e 'chomp $_;' ....
 
Na also . Geht doch .

Und das nächste mal nur noch so. :devil:

Gruß Sono
 
Hallo
Nicht schlecht ;)

Gegenvorschlag:
Wenn die Dateien alle in einem Verzeichnis ohne Unterverzeichnisse liegen, dann folgendes Script aus diesem Verzeichnis starten.
Die Datei verzeichnis.ini enthält absolute Pfade? Wenn nicht kann man das anpassen. Einfach am Begin die Variable festlegen und bei mkdir anfügen.

Code:
perl -MFile::Copy -e 'open IN,"<verzeichnis.ini";@a=<IN>;map {foreach $e (@a){mkdir "$e\n" unless -d $e;copy $_, "$e/$_" if -e $_ }}@ARGV' /pfad/zu/der/quelle/*

Gruß Wolfgang
 
Ich hab map eigentlich noch nie benutzt, scheint aber ne verdammt nützliche Funktion zu sein.

Gruss, Phorus
 
Phorus schrieb:
Ich hab map eigentlich noch nie benutzt, scheint aber ne verdammt nützliche Funktion zu sein.

Gruss, Phorus
Stimmt, macht aber den Code mitunter sehr schlecht lesbar.

Ich hätte statt der inneren Schleife noch ein zweites map einfügen können, aber das wär dann noch unklarer geworden.

Für Einzeiler ist es jedenfalls wie auch die Kurzform der if-Abfrage sehr geeignet.

Gruß Wolfgang
 
Na also, wusste ich doch das auf Euch verlass ist.

Werde den Code gleich mal ausprobieren.
Das spart mir einen halben Tag Dokumentation, integration und ähnlichen Verwaltungsschnickschnack.

vielen dank

b.
 
Macht dann 9 Euro 99, zu zahlen am nächsten Schalter :D
 
Und ich krieg den grösseren Anteil, weil meine Lösung grösser ist :D
 
Hallo,

ich bräuchte so etwas ähnliches.

Ich möchte aus einem Pfad C:\Programme\Daten1\*.*
alle Datein (incl. der Dateien aller Unterordner) in einen neuen Pfad kopieren.
z.b. D:\Datenneu bzw. einen UNC Pfad auf dem Server \\dose\daten\datenneu

Es sollen aber keine (Unter-)Verzeichnisse mit kopiert/angelegt werden.

Hat hierfür einer der Spezialisten Zeit?

Thx
 

Ähnliche Themen

Server-Monitoring mit RRDTool

Zurück
Oben