Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]6298[/thread]

Schleife: Dateien umbenennen: Prob mit substr (Seite 3)

Leser: 3


<< |< 1 2 3 4 >| >> 32 Einträge, 4 Seiten
AbRaXaS
 2007-01-23 12:57
#82841 #82841
User since
2006-05-22
30 Artikel
BenutzerIn
[default_avatar]
JAAAAAAAAAAAAAAAAAAA! Danke!
Funktioniert!!!!

thx 4 that!!

Komisch komisch, dass da noch ein \n drin ist. Aber es funktioniert ja anscheinen. Dafür mal fetten Dank. :D:cool:

Ach ja und ich habe anfangs mit dem Hash gearbeitet aber mit den ganzen versuchen hat ich das Skript dann schon umgeschrieben.\n\n

<!--EDIT|AbRaXaS|1169549878-->
pq
 2007-01-23 13:39
#82842 #82842
User since
2003-08-04
12209 Artikel
Admin1
[Homepage]
user image
[quote=AbRaXaS,23.01.2007, 10:53]
Code: (dl )
open(LS,"/bin/ls ../Bilder |")||print "LS";
[/quote]
sorry, aber das ist blödsinn. warum ein open auf 'ls', wenn perl doch
eine opendir-Funktion bietet?
Code: (dl )
1
2
3
4
5
opendir LS, '../Bilder' or die $!;
while (my $file = readdir LS) { ... }
# oder moderner mit lexikalischem filehandle:
opendir my $ls, '../Bilder' or die $!;
while (my $file = readdir $ls) { ... }

zur zweiten variante siehe Wiki:Lexikalischer filehandle
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
AbRaXaS
 2007-01-26 10:07
#82843 #82843
User since
2006-05-22
30 Artikel
BenutzerIn
[default_avatar]
@ pq: Danke, hab deinen Hinweis mal umgesetzt, allerdings habe ich ein Problem

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!usr/bin/perl -w
use CGI::Carp qw(fatalsToBrowser);
use File::Copy;
use strict;

opendir (my $ls, '/usr/home/public_html/content/1') or die $!;
while (my $file = readdir ($ls)) {
if ( !(-d $file)){
chomp($file);
# print "File: " . $file . "\n";
# print "Dir: " . $ls . "\n";
if (unlink($file) == 0) {
print "File $file deleted successfully.\n";
} else {
print "File $file was not deleted.\n";
}
}
else{
;
print "Directory\n";
}
}
closedir $ls;

Die Meldung ist zwar:
Code: (dl )
File 01.txt deleted successfully!
Aber die Datei hält sich wacker auf dem Server. Die Ordnerrechte sind bei 755 und ligen beim FTP User, mit dem auch das Skript ausgeführt wird. Ich weiß nicht weiter hab mir auch ein Perl Buch besorgt, was jetzt aber so auf die schnelle nichts hergibt.\n\n

<!--EDIT|AbRaXaS|1169800398-->
renee
 2007-01-26 10:31
#82844 #82844
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Löschen geht mit unlink:
Code: (dl )
unlink $file; 
(siehe <!--pod_f1--><a href="//perldoc.perl.org/functions/unlink.html" target="_blank"><img alt="perldoc " src="/iB_html/non-cgi/Skin/SKIN-3/images/perldoc.gif" border="0"> <!--pod_f2-->-f unlink<!--pod_f3--></a><!--pod_f4-->)
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/
AbRaXaS
 2007-01-26 10:34
#82845 #82845
User since
2006-05-22
30 Artikel
BenutzerIn
[default_avatar]
Sorry, hatte vergessen das move da rauszunehmen.
Das unlink hatte ich da drin, nur ich hatte schon weiter gearbeitet und da ist das move dazwischengerutscht. Hab den Quellcode oben geändert.
renee
 2007-01-26 10:40
#82846 #82846
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Mach mal aus
Code: (dl )
1
2
3
4
5
       if (unlink($file) == 0) {
print "File $file deleted successfully.\n";
} else {
print "File $file was not deleted.\n";
}


Code: (dl )
1
2
unlink($file) or
print "File $file was not deleted: $!.\n";
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
 2007-01-26 10:43
#82847 #82847
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
So sollte es gehen:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!usr/bin/perl -w
use CGI::Carp qw(fatalsToBrowser);
use File::Copy;
use strict;

my $dir = '/usr/home/public_html/content/1';

opendir (my $ls, $dir) or die $!;
while (my $file = readdir ($ls)) {
if ( !(-d $file)){
chomp($file);
if (unlink($dir . '/' . $file)) {
print "File $file deleted successfully.\n";
} else {
print "File $file was not deleted: $!.\n";
}
}
else{
print "Directory\n";
}
}
closedir $ls;
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/
AbRaXaS
 2007-01-26 11:01
#82848 #82848
User since
2006-05-22
30 Artikel
BenutzerIn
[default_avatar]
Danke! Funktioniert.

Aber wo lag der Fehler? Kommt der mit den "harten" Verzeichnissen nicht klar?
topeg
 2007-01-26 11:17
#82849 #82849
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Der Pfad zur Datei war falsch.

Wenn man "datei.txt" abfrgt entspricht es "./datei.txt" und das wird in dem Verzeichnis gesucht in dem das Script gestartet wurde. (relaive Pfadangebe) Wenn das Script allso so gestartet wurde:
Code: (dl )
1
2
cd /home/test1/dir1
perl /pfad/zum/script/script.pl

Dann wird "./datei.txt" so zu einer absoluten Pfadangabe aufgelöst: "/home/test1/dir1/datei.txt"

Gliches gilt auch, wenn man im script "chdir" benutzt. Damit wird der aktuelle Arbeitspfad neu gesetzt und alle relativen Pfadangaben beziehen sich darauf.

Wenn man allso sicher sein will die richtige Datei getroffen zu haben, so sollte man immer mit absoluten Pfadangen arbeiten. Perl bietet dazu eine ganze reihe von Modulen.
renee
 2007-01-26 11:22
#82850 #82850
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
doch, du hast aber nur den Dateinamen ausgelesen und wolltest dann eine Datei im aktuellen Verzeichnis löschen...

Bei der ersten if-Abfrage musst Du übrigens auch noch ein $dir . '/' . machen, also if(! (-d $dir . '/' . $file))

Folgendes verdeutlicht vielleicht Deinen Code:
Code: (dl )
1
2
3
4
5
6
7
8
~/entwicklung 68> ll ../pkb_test/
total 10
-rw-rw-r-- 1 reneeb bioinf 823 Jan 23 12:33 main.pl
-rw-rw-r-- 1 reneeb bioinf 1605 Jan 23 10:55 test.html
-rw-rw-r-- 1 reneeb bioinf 132 Jan 22 16:43 test.pl
~/entwicklung 69> rm main.pl
main.pl: No such file or directory
~/entwicklung 70>
auch hier lese ich den Inhalt von einem anderen Ordner ein, versuche aber im aktuellen Verzeichnis die Datei zu löschen.

Nach der Änderung ist es das hier:
Code: (dl )
1
2
3
4
5
6
7
~/entwicklung 71> ll ../pkb_test/
total 10
-rw-rw-r-- 1 reneeb bioinf 823 Jan 23 12:33 main.pl
-rw-rw-r-- 1 reneeb bioinf 1605 Jan 23 10:55 test.html
-rw-rw-r-- 1 reneeb bioinf 132 Jan 22 16:43 test.pl
~/entwicklung 72> rm ../pkb_test/main.pl
~/entwicklung 73>


Also das ist nicht exakt das was im Programm passiert. Es soll nur verdeutlichen, warum man den ganzen Pfad angeben muss bzw. sollte...\n\n

<!--EDIT|renee|1169803995-->
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/
<< |< 1 2 3 4 >| >> 32 Einträge, 4 Seiten



View all threads created 2004-05-31 17:39.