PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zeichenkette am Anfang des Dateinamens entfernen



ReSeT
17-01-2003, 16:42
Hi!

Ich hab zwar schon die Suchfunktion bemüht, aber gerade hierzu gabs nichts passendes:

Ich habe mehrer Dateien in einem Verzeichnis liegen, deren Dateinamen alle mit der gleichen Zeichenkette beginnen, aber unterschiedliche Endungen haben.

Könnte mir mal jemand einen Denkanstoß für ein Skript geben, mit dem ich von beliebig vielen Dateien in einem Verzeichnis den Anfang des Dateinamens, der immer gleich lautet, abschneiden kann?

GreetZ

ReSeT

tomes
17-01-2003, 19:36
#!/usr/bin/perl -w
$path="/hier/liegen/die/Dateien/";
$ls =`ls $path`;
@ls = split(/\s+/,$ls);
foreach(@ls){
$a =$_;
if($_ =~ /xxx.*/){
$_ =~ s/xxx//g;
$b = $_;
system("mv $a $b");
}
}
exit 0;

xxx ist natuerlich die "gleichen Zeichenkette" ;)


T;o)Mes

ReSeT
17-01-2003, 20:09
Danke, leider habe ich noch das Problem, daß die Zeichenkette Leerzeichen enthält und Perl das wohl nicht als einzelne Zeichenkette erkennt.

Was nun?

Hans-Georg Normann
17-01-2003, 20:11
Ich habe zwar keine Ahnung von Perl, aber ich denke du mußt jedes Leerzeichen mit \ (Backslash) maskieren.

Hans

Hans-Georg Normann
17-01-2003, 20:14
Stopp, Kommando zurück, das scheint mir auch nicht richtig zu sein.

Mit ls bekommst du die Verzeichnisse in einer Zeichnkette gelistet, getrennt durch ein Leerzeichen? Dannkann das so glaube ich nicht gehen. Ich muß passen!

tomes
17-01-2003, 20:24
ls -l | awk '{print $9}' in eine File umleiten, oder nach $9 irgendwelche nicht vorkommende Zeichen und dann danach splitten oder oder oder ;)
Du wolltest doch nur ein Denkanstoss ;)

T;o)Mes

ReSeT
18-01-2003, 09:10
Stimmt, das mit dem Denkantoß sagte ich :D

Ich werd mich mal daran versuchen, wobei ich eigentlich mit Perl noch nichts am Hut hatte. Aber einmal ist immer das erste Mal.

Oder bau ich ein kleines C-Programm?

Auf jeden Fall Danke erstmal :)

tomes
18-01-2003, 17:01
Na ja, der *Denkanstoss* ist ja nun da ;)
Wie geschrieben bekommst du mit dem "ls | awk ... $9" eine Liste der Files, die Ausgabe einfach in tmp-File umleiten ( > /tmp/FILE ) und dann mit


open(AA,"</tmp/FILE");
foreach(<AA>){
....
hier passiert dann das was oben schon steht
}
close(AA);
system("rm /tmp/FILE");

Auch wuerde sich das Pakete File::Find dafuer gut eignen.
http://search.cpan.org/author/JHI/perl-5.8.0/lib/File/Find.pm

T;o)MEs

Jasper
20-01-2003, 09:02
Original geschrieben von ReSeT

Ich habe mehrer Dateien in einem Verzeichnis liegen, deren Dateinamen alle mit der gleichen Zeichenkette beginnen, aber unterschiedliche Endungen haben.

Könnte mir mal jemand einen Denkanstoß für ein Skript geben, mit dem ich von beliebig vielen Dateien in einem Verzeichnis den Anfang des Dateinamens, der immer gleich lautet, abschneiden kann?


$ ls -1
abc123
abc234
abc345
$ for F in abc*; do mv "${F}" "${F##*abc}; done
$ ls -1
123
234
345

-j