Martin Borchert wrote:
Am Sonntag, 29. Dezember 2002 17:06:17 schrieb Michael Messner:
Ordner a: Datei a bis ? soll zu Test 1 bis ? geändert werden
Ein Einzeiler in der Bash tut es:
n=1;for file in *; do mv "$file" "Test $n";let n=$n+1;done
Der macht aber keinerlei Fehlererkennung, d. h., wenn du komische Dateinamen benutzt, oder es schon Test*-Dateien gibt, sind die u. U. anschließen wech.
Eine einfache Ergänzung wäre die Option -i für mv, dann werden zumindest etwaige schon bestehende Dateien mit Namen der Form "Test x" nur nach Rückfrage ersetzt. Für den Fall, daß Dateinamen vorkommen, die mit einem Bindestrich anfangen, kann vor dem ersten Dateinamen beim mv-Aufruf noch das Argument "--" eingefügt werden, um zu verhindern, daß ein solcher Dateiname als Option interpretiert wird, also so: ...; do mv -i -- "$file" "Test $n"; ... Wenn mit Leerzeichen (oder allgemeiner: mit "Whitespace", also auch Tabulatorzeichen, Zeilenumbrüchen etc.) in Dateinamen gerechnet werden muß, ist die "for file in *"-Konstruktion allerdings nicht geeignet. (Einer der Gründe, warum ich Leerzeichen in Dateinamen möglichst vermeide.) Auf das Vorhandensein solcher Dateien sollte man also vorher unbedingt achten. Ansonsten sollten bei der Konstruktion eigentlich keine "schwereren Fehler" (sprich: Dateiverluste) auftreten -- schlimmstenfalls werden (z.B. wegen fehlender Zugriffsrechte) einige Dateien nicht umbenannt und bestehen unter ihrem alten Namen weiter, aber das kann man ja anschließend leicht kontrollieren. Eilert -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Eilert Brinkmann -- Universitaet Bremen -- FB 3, Informatik eilert@informatik.uni-bremen.de - eilert@tzi.org http://www.informatik.uni-bremen.de/~eilert/