Schrift
[thread]6789[/thread]

Verzeichnisbaum löschen?: eigene Schleife anstatt rmtree

Leser: 1


<< >> 10 Einträge, 1 Seite
renee
 2005-03-13 09:35
#52665 #52665
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#! /usr/bin/perl

use strict;
use warnings;
use File::Find;

my $dir = './testdir';
my @dirs;
find(\&get_dir,$dir);

for my $dirs(reverse(@dirs)){
opendir(DIR,$dirs) or die $!;
unlink $_ for(readdir(DIR));
closedir DIR;
rmdir($dirs); # rmdir löscht nur leere Verzeichnisse
}


sub get_dir{
push(@dirs,$File::Find::name) if(-d $_);
}# get_dir
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/
pktm
 2005-03-13 20:02
#52666 #52666
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
readdir(DIR) gibt doch auch . und .. zurück.
Wenn man unlink darauf anwendet kann man das Dateisystem beschädigen!
http://www.intergastro-service.de (mein erstes CMS :) )
pq
 2005-03-13 21:15
#52667 #52667
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=renee,13.03.2005, 19:23]@pq: File::Find geht doch "abwärts" (Ich habe es jetzt nicht ausprobiert), oder?? rmdir geht ja nur auf leere Verzeichnisse... Wenn File::Find "abwärts" geht, dann sind die zu löschenden Verzeichnisse noch nicht leer...[/quote]
ich habe ja finddepth() aufgerufen. das macht eine tiefensuche und
somit werden zuerst die dateien und dann die leeren verzeichnisse
gelöscht.
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
Dubu
 2005-03-14 16:24
#52668 #52668
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
(verschoben zu Allgemeines)

Die Frage bleibt, warum man ein Standardmodul (File::Path) durch ein anderes Standardmodul (File::Find) ersetzen sollte ...
x-man
 2005-03-13 01:26
#52669 #52669
User since
2003-09-11
67 Artikel
BenutzerIn
[default_avatar]
Kennt hier jemand eine Schleife zum Löschen von Verzeichnisbaum (Verzeichnis mit Unterverzeichnisse und Dateien, beliebig tief)?

PS.

use File::Path;
rmtree($dir);\n\n

<!--EDIT|x-man|1110670309-->
pq
 2005-03-13 14:47
#52670 #52670
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
hmm, wieso nicht gleich mit File::Find löschen?
Code: (dl )
1
2
finddepth(\&wanted, "...");
sub wanted { -d $_ ? rmdir $_ : unlink $_ }
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
renee
 2005-03-13 20:23
#52671 #52671
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
@pq: File::Find geht doch "abwärts" (Ich habe es jetzt nicht ausprobiert), oder?? rmdir geht ja nur auf leere Verzeichnisse... Wenn File::Find "abwärts" geht, dann sind die zu löschenden Verzeichnisse noch nicht leer...

@pktm: dann einfach unlink $_ for(readdir(DIR)); durch
Code: (dl )
unlink $_ for(grep{$_ !~ /^\.\.?$/}readdir(DIR));
ersetzen...
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/
renee
 2005-03-14 00:25
#52672 #52672
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
ok, werd's mir hinter die Ohren schreiben ;)
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/
pKai
 2005-03-14 17:15
#52673 #52673
User since
2005-02-18
357 Artikel
BenutzerIn
[default_avatar]
Wenn man nach rmtree googled wird man überschwemmt mit Links auf Security-Warnungen in Bezug auf dieses.
Akademisches Problem (benötigt lokalen Zugriff auf tmpdir?)?
Bereits gefixt (einer der Links benannte 5.6.1, 5.8.4)?
I sense a soul in search of answers.
ptk
 2005-03-14 20:46
#52674 #52674
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
[quote=pKai,14.03.2005, 16:15]Wenn man nach rmtree googled wird man überschwemmt mit Links auf Security-Warnungen in Bezug auf dieses.
Akademisches Problem (benötigt lokalen Zugriff auf tmpdir?)?
[/quote]
Ja, ohne lokalen Zugriff geht es nicht.
Quote
Bereits gefixt (einer der Links benannte 5.6.1, 5.8.4)?

Ja, in bleedperl ist ein Fix drin. Dieser duerfte dann auch in 5.8.7 uebernommen werden.
<< >> 10 Einträge, 1 Seite



View all threads created 2005-03-13 09:35.