|
|
Dateien löschen
[thread]14609[/thread]
hide all
open all
-

+22 replies
-
|
lukastonner
|
2010-02-07 19:15 |
|
User since 2010-02-07
39
articles
|
Hallo Community. Eine einfache Frage und wahrscheinlich schon 1000 mal beantwortet. In dem Ordner „datasource“ befinden sich einige Textdateien die ich löschen möchte. Der Pfad ist in einem Starterscript als Umgebungsvariable deklariert. (/home/xx/xx/datasource
). Irgendwie funktioniert es so nicht die Dateien zu löschen. Auch nicht über den Weg eine „Inhaltsdatei“ zu erzeugen (siehe code) Als Fehlermeldung bekomme ich immer: rm: /home/xx/xx/xx is a directory. Wie bekomme ich die Dateien gelöscht???? Es ist keine CGI Programmierung. Würde mich über Hilfe freuen.
Mein Code:
| Code: |
|
$datasource=$ENV{'datasource'};
opendir(DIR, "$datasource"); my @inhalt = readdir(DIR); print @inhalt,"\n"; closedir(DIR); system ("rm", "$datasource"); #oder…. system ("rm", "@inhalt");
|
//Modedit GwenDragon: Code-Tags
Last edited: 2010-02-07 20:03:08 +01:00
|
|
|
|
-
User since 2009-09-13
1812
articles
|
Dateien lösche ich immer mit unlink
Siehe perldoc -f unlink
Und danach mit rm die Verz. löschen.
|
|
10 print "Hallo"
20 goto 10
|
|
|
|
-

+20 replies
-
User since 2003-08-04
13300
articles
|
Du versuchst ja auch das Verzeichnis zu löschen...
Die Dateien bekommst Du so gelöscht:| Code (perl): |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
use File::Spec;
$datasource=$ENV{'datasource'};
opendir(DIR, "$datasource");
my @inhalt = readdir(DIR);
closedir DIR;
for my $entry ( @inhalt ) {
my $path = File::Spec->catfile( $datasource, $entry );
next if -d $path;
unlink $path;
}
|
|
|
|
|
|
|
-
User since 2003-08-04
1976
articles
|
2010-02-07T18:19:33
renee# hole die Einträge
opendir(DIR, "$datasource");
my @inhalt = readdir(DIR);
closedir DIR;
}[/code]
... und am besten du fragst die jeweilige Aktion auch immer mit
ab... also so:
| Code (perl): |
|
opendir(DIR, "$datasource") or die $!;
my @inhalt = readdir(DIR);
closedir DIR or die $!;
|
... und noch besser, du verwendest lexikalische FH..., also so:
| Code (perl): |
|
opendir(my $fhDir, "$datasource") or die $!;
my @inhalt = readdir($fhDir);
closedir $fhDir or die $!;
|
... hat Renee aber sicher in der Eile nur vergessen...
nachzulesen nämlich in seinem Blog ;)
http://reneeb-perlblog.blogspot.com/search/label/o...
Gruß,
Gernot
|
|
|
|
|
|
-

+18 replies
-
|
lukastonner
|
2010-02-07 20:05 |
|
|
|
User since 2010-02-07
39
articles
|
vielen dank für die schnelle antwort und ich werde es morgen früh gleich versuchen.geht es nicht einfacher (ohne die geschichte mit dem @inhalt???). Es kann doch nicht so schwer sein einfach ein paar Textdateien aus einem Ordner zu löschen. Muss man den weg darüber gehen sich erst den Inhalt zu holen?
Ich habe gelesen dass der Befehl unlink für CGI Programmierung gedacht ist und damit die Daten nicht physikalisch gelöscht werden.
|
|
|
|
-

+13 replies
-
User since 2003-08-04
8347
articles
|
2010-02-07T19:05:44
lukastonnergeht es nicht einfacher (ohne die geschichte mit dem @inhalt???). Es kann doch nicht so schwer sein einfach ein paar Textdateien aus einem Ordner zu löschen. Muss man den weg darüber gehen sich erst den Inhalt zu holen?
wie willst du eine liste von dateien löschen, wenn du vorher nicht weisst, wie die heissen? kapier ich nicht. natürlich musst du dir vorher die dateiliste holen.
|
|
|
|
|
|
-

+4 replies
-
|
lukastonner
|
2010-02-07 20:13 |
|
|
|
User since 2010-02-07
39
articles
|
|
ich möchte einfach ALLE Dateien löschen die sich in dem Ordner befinden, wie die heissen ist egal.... Wofür brauch ich denn dann die Liste? Dachte das geht einfacher. Einfach Pfad angeben und alles raushauen....
|
|
|
|
-

+8 replies
-
User since 2009-09-13
1812
articles
|
2010-02-07T19:08:25
pqwie willst du eine liste von dateien löschen, wenn du vorher nicht weisst, wie die heissen? kapier ich nicht. natürlich musst du dir vorher die dateiliste holen.
Window'ser kennen RMDIR /s um ganze Bäume zu löschen (da haben wir es wieder....) und das sucht er, was ich durchaus verstehen kann.
:)
|
|
10 print "Hallo"
20 goto 10
|
|
|
|
-

+7 replies
-
User since 2003-08-04
8347
articles
|
und das löscht nicht das verzeichnis selbst mit?
linuxer kennen rm -rf. und was wollten wir jetzt damit wieder beweisen, fräulein bianca?
Last edited: 2010-02-07 20:18:48 +01:00
|
|
|
|
|
|
-

+6 replies
-
User since 2009-09-13
1812
articles
|
2010-02-07T19:17:25
pqund das löscht nicht das verzeichnis selbst mit?
linuxer kennen rm -rf. und was wollten wir jetzt damit wieder beweisen, fräulein bianca?
doch, rmdir /s löscht das Verzeichnis selbst mit.
Aber rmdir in Perl löscht m.W. nur leere Verzeichnisse und nicht den ganzen Baum. Dafür müsste man dann wieder per system() für rm -rf o.ä. ran, wenn ich das richtig überblicke.
Und für jemanden, der aus der DOS-Shell unter Win rmdir /s kennt - was für alle Linuxer natürlich anlog rm -rf gilt! - mag es evtl. etwas umständlich aussehen, dass man mit Perl erst die Dateien zusammensuchen und einzeln löschen muss, bevor man das Verz. weg bekommt.
Nur das meinte ich. Sonst garnichts.
|
|
10 print "Hallo"
20 goto 10
|
|
|
|
-

+4 replies
-
User since 2003-08-04
8347
articles
|
2010-02-07T19:24:25
bianca
Nur das meinte ich. Sonst garnichts.
ja sicher. und der satz "da haben wir es wieder" ist dir nur so rausgerutscht, nicht wahr ;-)
in perl kann man wunderbar auch verzeichnise löschen. mit File::Path::remove_tree.
das kann der ein oder andere user gut gebrauchen, ausser leute mit kaputten windows-installationen, die keine module installieren können.
|
|
|
|
|
|
-

+3 replies
-
User since 2009-09-13
1812
articles
|
2010-02-07T19:28:10
pqja sicher. und der satz "da haben wir es wieder" ist dir nur so rausgerutscht, nicht wahr ;-)
Das war bezogen auf das Löschen ganzer Bäume :)
Wie im anderen Thread.
Edit: Komisch, heute morgen war Quote noch richtig, jetzt (19:58) ist es falsch, obwohl ich nicht dran war. Hab es mal korrigiert.
Edit2: Achso, der Baum wurde abgetrennt. Dabei ist wahrscheinlich versehentlich editiert worden. OK, alles klar.
Last edited: 2010-02-08 20:00:02 +01:00
|
|
10 print "Hallo"
20 goto 10
|
|
|
|
-

+2 replies
-
User since 2003-08-04
8347
articles
|
2010-02-08T10:43:09
biancaEdit2: Achso, der Baum wurde abgetrennt. Dabei ist wahrscheinlich versehentlich editiert worden. OK, alles klar.
niemand hat da versehentlich was editiert. in der history sind nur zwei edits von dir zu sehen. hast das eine öffnende quote wohl heute morgen übersehen. kann ja mal passieren.
|
|
|
|
|
|
-
User since 2009-09-13
1812
articles
|
2010-02-08T20:46:00
pqniemand hat da versehentlich was editiert. in der history sind nur zwei edits von dir zu sehen. hast das eine öffnende quote wohl heute morgen übersehen. kann ja mal passieren.
Rutscht der Thread denn in der "Letzte 24h" auch nach oben (ohne fett markiert zu sein), wenn etwas rausgetrennt wird?
|
|
10 print "Hallo"
20 goto 10
|
|
|
|
-
-

+2 replies
-
User since 2009-09-13
1812
articles
|
2010-02-07T19:05:44
lukastonnerIch habe gelesen dass der Befehl unlink für CGI Programmierung gedacht ist und damit die Daten nicht physikalisch gelöscht werden.
Das ist ja komplettes durcheinander. unlink ist ein Perlbefehl zum Löschen von Dateien. Du verwechselst das mit symbolischen Links unter Linux. Das hat aber wiederum soviel mit CGI zu tun, wie ein Affe mit Fahrrad fahren :)
|
|
10 print "Hallo"
20 goto 10
|
|
|
|
-

+2 replies
-
User since 2003-08-04
8347
articles
|
du hast insofern recht, dass die daten nicht gelöscht werden. die datei ist dann nur nicht mehr im system verlinkt, weshalb sie sozusagen gelöscht ist. die funktion heisst aber unlink, weil es nunmal nu rein unlink ist.
wenn du dateien wirklich löschen willst, musst du sie schon komplett mit dummy-daten überschreiben. aber das hat nichts mit perl zu tun.
du kannst also ruhig unlink benutzen, es sei denn, du willst deine festplatte mit sensiblen daten komplett reinigen, so dass auch ein recovery nicht mehr an die daten rankommt.
der hinweis von bianca auf symbolische links ist insofern etwas irreführend, da unlink tatsächlich einen link entfernt. aber einen anderen als den symbolischen.
|
|
|
|
|
|
-
|
betterworld
|
2010-02-08 20:01 |
|
|
|
User since 2003-08-21
2363
articles
|
2010-02-07T19:33:55
pqwenn du dateien wirklich löschen willst, musst du sie schon komplett mit dummy-daten überschreiben.
Weitere Diskussion zu dem Thema habe ich in einen neuen Thread verschoben: Festplattendaten unwiederbringlich löschen
|
To my continued amazement, the Perl folks are the only ones who never get upset. They just say "Haha, yeah, boy, you're right, it sure is ugly. Heh. Yeah, so, um, anyway, I'm going to get back to work now..." It's awesome. I've gained so much respect for them. src
|
|
|
|
View all threads created 2010-02-07.
|