Archiv verlassen und diese Seite im Standarddesign anzeigen : Zeichenkette am Anfang des Dateinamens entfernen
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
#!/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
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!
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
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 :)
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
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
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.