Schrift
[thread]8214[/thread]

Verzeichnisse rekursiv ERSTELLEN

Leser: 4


<< >> 8 Einträge, 1 Seite
AndreasM
 2006-08-02 15:01
#68520 #68520
User since
2005-10-08
31 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo zusmmen,

der Befehl 'mkdir "verzeichnis";' erstellt mir ja ein Verzeichnis im aktuellen Ordner.
Nun möchte ich aber gerne einen weiteren Odner miterstellen.
Eine Zeile 'mkdir "verzeichnis/teilA";' für sich funktioniert allerdings nicht.

Muss ich wirklich

mkdir "verzeichnis";
mkdir "verzeichnis/teilA";
nutzen, oder gibt es bei mkdir einen Trick?

MfG
AndreasM
renee
 2006-08-02 15:20
#68521 #68521
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Das macht man am besten mit CPAN:File::Path:
Code: (dl )
1
2
3
    use File::Path;

mkpath('Verzeichnis/teilA', 0, 0755);
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
GwenDragon
 2006-08-02 15:24
#68522 #68522
User since
2005-01-17
14748 Artikel
Admin1
[Homepage]
user image
das übergeordnete Verzeichnis muss schon vorhanden sein.
Also ein mkdir "./dies/das" geht nicht, wenn ./dies noch nicht existiert.

wenn du
mkdir "./dies/das" or die $!;
verwendest, meckert Perl auch dass das Verzeichnis nicht existiert.

Mit CPAN:File::Path ginge es aber.
Code: (dl )
1
2
use File::Path;
File::Path::mkpath "./moppel/test/zu/i"; # erzeugt auch die Unterverz.


/Edit: Da war jemand schneller ;)\n\n

<!--EDIT|GwenDragon|1154518217-->
docsnyder
 2006-08-02 17:25
#68523 #68523
User since
2005-09-08
300 Artikel
BenutzerIn
[Homepage] [default_avatar]
Wenn Dein Script unter UNIX läuft (oder cygwin unter Windows installiert hast) tut's auch:

Code: (dl )
system("mkdir -p ./a/b/c");

Gruß, Doc\n\n

<!--EDIT|docsnyder|1154525351-->
renee
 2006-08-02 18:32
#68524 #68524
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Wobei das den Nachteil hat, dass es nicht plattformunabhängig ist. CPAN:File::Path ist auch ein CORE-Modul...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
pq
 2006-08-02 20:39
#68525 #68525
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
und es hat den nachteil, dass man sich evtl. um quoting von leerzeichen etc.
kümmern muss. wenn überhaupt, würde ich das mit der listen-form
von system() machen, das spart einem dann wenigstens das quoten.
perldoc -f system
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
topeg
 2006-08-02 22:11
#68526 #68526
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Wenn man keine Lust hat "File::Path" zu verwenden, kann man das auch schnell von Hand zusammentippen:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
sub mkpath()
{
my ($path,$rights)=@_;
my @dirs=split('/',$path);
for( my $i=0; $i<@dirs; $i++ )
{
my $d_now.=join('/', @dirs[0..$i]);
mkir($d_now,$rights);
}
}

so ähnlich funktioniert das im Modul auch, nur das Splitten des Pfades ist ausgefeiter.
AndreasM
 2006-08-03 19:03
#68527 #68527
User since
2005-10-08
31 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hm,
Code: (dl )
mkdir "./dies/das" or die $!;


das hat schon fast lyrische Qualität ;)

Ansonsten ist File::Path das, was ich gesucht habe.
Danke für den Tip.

AndreasM\n\n

<!--EDIT|AndreasM|1154617486-->
<< >> 8 Einträge, 1 Seite



View all threads created 2006-08-02 15:01.