Schrift
[thread]5873[/thread]

Skript löscht Dateien: Perlskript

Leser: 1


<< |< 1 2 >| >> 17 Einträge, 2 Seiten
GetIT
 2003-11-02 21:18
#68842 #68842
User since
2003-11-02
24 Artikel
BenutzerIn
[default_avatar]
Dieses Skript auf Linux (Perlversion 5.8.0) mehrmals ausgeführt löscht Dateien:
--------------------------------------------------------------
#!/usr/bin/perl

chdir("../Bilder") || die "Ordner existiert nicht!";
push(@bilder, glob"*.JPG");
push(@bilder, glob"*.jpg");
$i = 1;

foreach (@bilder)
{
rename "$_", "Daenemark$i.jpg";
print "$_ --> Daenemark$i.jpg\n";
$i++;
}
---------------------------------------------------------------

Warum???

In dem Ordner ../Bilder sind vor der Ausführung des Skripts 29 Bilder (*.jpg).
Nach der
1.Ausführung 29
2.Ausführung 29
3.Ausführung 21
4.Ausführung 21
5.Ausführung 13
6.Ausführung 13
7.Ausführung 5
Jetzt kann man das Skript noch beliebig ausführen. Es bleibt bei 5 Bildern
Ronnie
 2003-11-02 21:49
#68843 #68843
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Wenn es mehrfach läuft und du hast eine Datein die von Daenemark15.jpg in Daenemark4.jpg umbenannt wird, wird die existierende Daenemark4.jpg überschrieben.
pq
 2003-11-02 21:52
#68844 #68844
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
du verschiebst z.B. Daenemark10.jpg nach Daenemark2.jpg, und später im skript
Daenemark2.jpg nach Daenemark12.jpg.
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
GetIT
 2003-11-03 01:30
#68845 #68845
User since
2003-11-02
24 Artikel
BenutzerIn
[default_avatar]
Klingt ja echt einleuchtend!!!

ABER, wieso werden die Dateien erst beim 3. Mal gelöscht und nicht schon beim 2. Mal????\n\n

<!--EDIT|GetIT|1067817520-->
Ronnie
 2003-11-03 11:16
#68846 #68846
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Dein eigentliches Problem besteht in der ASCII-Sortierung der von glob gelieferten Dateien. Ich schlage folgende Ergänzung vor, die bis 100 Dateien funktionieren dürfte:

Code: (dl )
1
2
3
4
5
6
7
foreach (@bilder) 
{
$j = ($i<10) ? "0$i" : $i;
rename "$_", "Daenemark$j.jpg";
print "$_ --> Daenemark$j.jpg\n";
$i++;
}


Habe es aber nicht getestet. Der Trick ist das die Dateien mit i=1..9 mit einer führenden 0 versehen werden.

EDIT1: Sorry, aber der Fehler mit dem ? ist mir glatt entgangen.\n\n

<!--EDIT|Ronnie|1067857243-->
format_c
 2003-11-03 11:27
#68847 #68847
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Ne damit gehts auch abwärts.
BTW: Was macht denn $j = ($i<10) : "0$i" : $i; ?

Gruß Alex
jan
 2003-11-03 11:39
#68848 #68848
User since
2003-08-04
2536 Artikel
ModeratorIn
[Homepage] [default_avatar]
$j wird, wenn $i < 10 ist, "0$i" zugewiesen, sonst (d.h., wenn $i nicht < 10) einfach nur $i.
damit erhält man dann
01
02
03
04
05
06
07
08
09
10
11
....

und hat damit auch bei der string-sortierung die numerische reihenfolge, solange es weniger als 100 dateien sind.
vielleicht eignet sich aber einfach ein numerisches sort vor dem glob?
format_c
 2003-11-03 11:50
#68849 #68849
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Sollte das dann nicht $j = (i<10) ? "0$i" : $i; heißen?
Gruß Alex
jan
 2003-11-03 12:01
#68850 #68850
User since
2003-08-04
2536 Artikel
ModeratorIn
[Homepage] [default_avatar]
ups, ertappt. mh, natürlich, hast recht. da sieht man mal wieder, was für ein fehlertoleranter kasten das menschliche gehirn ist. ich war fest davon überzeugt, dass es da genau so steht und habe gar nicht genauer hingeschaut.
böse fangfrage ;p
GetIT
 2003-11-03 12:26
#68851 #68851
User since
2003-11-02
24 Artikel
BenutzerIn
[default_avatar]
Das mit der Erweiterung klingt ja echt net blöd.

Danke euch allen!!!!!!!!!!!!
<< |< 1 2 >| >> 17 Einträge, 2 Seiten



View all threads created 2003-11-02 21:18.