Perl: Dateien löschen

Bash, Shell, PHP, Python, Perl, CGI
icy_wiener
Posts: 11
Joined: 2006-06-20 15:04

Perl: Dateien löschen

Post by icy_wiener » 2006-12-12 11:07

Hallo,

ich habe folgendes winziges Skript:

Code: Select all

#!/usr/bin/perl -w 
use File::Find;
$vz =".";
sub zeige{
	if ( (/content.html/) ){
		print ("$File::Find::dir n");
		system ("rm $File::Find::dir/../Datei1.txt");
		system ("rm $File::Find::dir/../Datei2.txt");
		system ("rm -R $File::Find::dir");
	}
	
}
#find (&zeige,$vz);
find ({ wanted => &zeige, follow => 1 },$vz);
Ich erhalte beim Ausführen immer die Fehlermeldung:
rm: cannot remove `./521/1/1249937/30/../Datei1.txt': No such file or
directory

rm scheint den Pfad nicht auflösen zu können. Wenn ich mir statt 'system' mit 'print' den Befehl ausgeben lasse und ihn manuell ausführe, funktioniert es.

Kann mir jemand auf die Sprünge helfen?

Viele Grüße

icy_wiener
Posts: 11
Joined: 2006-06-20 15:04

GelÖst

Post by icy_wiener » 2006-12-12 11:35

da ich gerade die Lösung gefunden habe, antworte ich mal kurz selbst:

Das Problem ist, das sich die rekursive Funktion immer gerade in dem Verzeichnis befindet, das sie durchläuft.
Deshalb kann der Pfad nicht aufgelöst werden.

Zur Lösung sind zuerst alle Pfade zu sammeln und anschließend von 'außerhalb' zu löschen:

Code: Select all

#!/usr/bin/perl -w 
use File::Find;
$vz =".";
@dirs = ();
sub zeige{
	if ( (/content.html/) ){
		print ("$File::Find::dir n");
		push @dirs, $File::Find::dir;
	}
	
}
#find (&zeige,$vz);
find ({ wanted => &zeige, follow => 1 },$vz);

foreach $i (@dirs)
{
	print ($i);
	system ("rm $i/../Datei1.txt");
	system ("rm $i/../Datei2.txt");
	system ("rm -r $i");
}

lucki2
Posts: 427
Joined: 2006-10-03 01:31

Re: Perl: Dateien löschen

Post by lucki2 » 2006-12-12 11:47

Du hast imho keine Shell, die expandieren könnte ... gib ihr eine chance.
zb so

Code: Select all

system "bash","-c","rm $File::Find::dir/../Datei1.txt";

Code: Select all

`rm $variable`;