PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : dateien umbennen



tömml
25-09-2006, 11:41
Hallo,
ich bin ein absoluter neuling in scripting.
ich möchte ein bash script schreiben, welches mir dateien aus einem verzeichnis (circa 1000 .txt dateien) umbenennt, mit der hand die umzubennen dauert doch zu lange, daher such ich nach einem script was mir das automatisch für alle dateien in dem verzeichnis macht.
die dateien sehen folgendermaßen aus:
bla_1.txt
bla_2.txt
..
bla_768.txt
...
bla_1535.txt

was ich quasi erreichen will ist, dass ich die dateien so benennen kann, dass sie danach im verzeichniss nach namen geordnet erscheinen, also quasi mit "führenden" nullen vor den zahlen im datei-namen. heißt, dass die dateien nach der umbenennung folgendermaßen aussehen;
bla_0001.txt
bla_0002.txt
..
bla_0768.txt
...
bla_1535.txt

Ich brauch die dateien im verzeichnis in der richtigen reihenfolge, da ich später den inhalt der dateien der reihe nach in eine .txt schreiben möchte (dies dann auch mit einem script).

ich hoffe mir kann jemand helfen wie ich das anstelle.
oder gibt es eine möglichkeit die datein in einem verzeichnis so zu ordnen, dass ich sie der reihenfolge (0,1,2,3...) mit einem script bearbeiten kann?
ich arbeite mit SuSE Linux 10.0

vielen dank im voraus.
gruß
ts

reneeb
25-09-2006, 14:11
#!/usr/bin/perl

use strict;
use warnings;

my $directory = '/path/to/directory/';
opendir(DIR,$directory) or die $!;
my @files = grep{-f $directory.$_ && $_ =~ /bla_\d+\.txt/}readdir(DIR);
closedir DIR;

for my $file(@files){
my ($nr) = $file =~ /bla_(\d+)\.txt/;
my $tmp = $file;
$nr = sprintf("%04d",$nr);
$file = s/\d+/$nr/;
rename $tmp,$file;
}

tömml
25-09-2006, 14:44
@reneeb

danke für die schnelle antwort. :)

zwei kleine fragen habe ich noch:

1. wie mache ich das perl script ausführbar? auch mit "chmod u+x" ? der name des programm sollte dann auch *.bash sein, oder?
2. wenn ich es dann in der konsole ausführe, ist es egal in welchem verzeichnis ich dann bin? habe my $directory = '~/Studienarbeit/MB2flit/test'; so angegeben? funktioniert das dann, z.b. wenn ich mich in eben diesem verzeichnis befinde?

gruß
ts

tömml
25-09-2006, 15:12
noch ein nachtrag:

habe das file ausführbar gemacht mit chmod (hat einwandfrei funktioniert).

folgende änderung habe ich zu meine letzen beitrag übernommen:
"my $directory = '../../home/schroeder/Studienarbeit/MB2flit/test';"

wenn ich das script nun in der konsole in meinem home-verzeichnis ausführe, bekomme ich auch keine fehlermeldung mehr (vorher konnte er my directory nicht öffnen ) und er führt das script scheinbar aus, allerdings geht das ziemlich schnell und wenn ich mir dann die dateien in meinem test verzeichnis anschaue sind keine änderungen im dateinamen zu sehen.

mach ich was falsch?

danke
gruß
ts

Romanday
25-09-2006, 18:14
noch ein nachtrag:
mach ich was falsch?

danke
gruß
ts

Vielleicht hat Perl in diesem Verzeichnis keine Schreib + Leserechte?

tömml
25-09-2006, 18:21
@Romanday

das mit den schreib+leserechten könnte natürlich sein. wo kann ich das für perl definieren? oder muss ich einfach die rechte der datein ändern?

reneeb
25-09-2006, 18:57
Da musst Du die Rechte der Datei ändern... Oder das Perl-Skript unter einem anderen Nutzer laufen lassen.

Du kannst auch erstmal Testausgaben in das Skript einbauen. Ich habe es nur auf die Schnelle getippt...