Dateien umbenenen via Shellskript

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
nast
Beiträge: 14
Registriert: 28.04.2003 22:34:33
Kontaktdaten:

Dateien umbenenen via Shellskript

Beitrag von nast » 09.12.2004 19:31:11

Hi @ all

ich versuche nun schon seit einiger Zeit alle in einem Ordner befindlichen Files mit der Endung .txt zu versehen.
Das Problem dabei ist, das sich in dem Ordner zusätzlich zu den Files ohne Endung auch noch Files mit diversen anderen Endungen befinden ( z.b. .pdf .jpg .TXT . sh....... ). Diese Files sollen natürlich ihre alte Endung behalten.

---> Zum händischen ändern sind es zu viele Files :?

Kann ich das evtl. mit mv und regulären Ausdrücken erledigen


Greetz nast
greetz

nast

Debian User :-)

Benutzeravatar
QT
Beiträge: 1322
Registriert: 22.07.2004 21:08:02
Wohnort: localhost

Beitrag von QT » 09.12.2004 19:50:48

Ungetestet!

Code: Alles auswählen

$ for file in *; do
> echo $file | grep -q "\." || mv "$file" "$file.txt"
> done
Obiges geht nur, wenn die zu ändernden Dateien keinen Punkt im Namen haben!

nast
Beiträge: 14
Registriert: 28.04.2003 22:34:33
Kontaktdaten:

Beitrag von nast » 09.12.2004 19:57:15

hi QT,

danke für die schnelle Antwort,


kanst Du mir das evtl. erklären

8O

:?:

danke nast
greetz

nast

Debian User :-)

Benutzeravatar
Joghurt
Beiträge: 5244
Registriert: 30.01.2003 15:27:31
Wohnort: Hamburg
Kontaktdaten:

Beitrag von Joghurt » 09.12.2004 20:07:32

Alternativ:

Code: Alles auswählen

rename "s/^([^.]*)$/\1.txt" *
(Das Programm rename wird von Perl bereitgestellt)

Erklärung: rename erwartet (mind.) 2 Parameter, zuerst einen Perl-Substitution-Ausdruck, dann eine Liste der Dateien, die es evtl. umbenennen soll.

Die Syntax des Suchausdrucks ist:
s/RE-Ausdruck/Ersetzungsausdruck/

/ ist ein Trennzeichen, man kann auch ein beliebiges anderes wählen, z.B.
s!RE-Ausdruck!Ersetzungsausdruck!

Der Ausdruck ^([^.]*)$ bedeutet:
  • ^ steht für den Beginn der Zeile, dies ist notwendig, damit der Ausdruck nicht auf einen Teil des Namens angewendet wird
  • () erzeugt eine Gruppe; im Ersetzungsausdruck steht dann \1 für den Teil des Textes, auf den die Gruppe gepasst hat (in unserem Fall der gesamte Dateiname)
  • [^.] heisst: jedes Zeichen, außer einem Punkt ( [abcd] würde für ein a oder b oder c oder d stehen, [^abcd] kehrt die Bedeutung um, alles außer abcd)
  • Der stern dahinter heißt, dass [^.] beliebig oft hintereinander (auch gar kein mal) vorkommen darf; + würde mindestens einmal heißen
  • $ steht für das Zeilenende, mit dem ^$ haben wir erreicht, dass der Ausdruck auf das gesamte Wort passen muss

roli
Beiträge: 3174
Registriert: 10.09.2003 17:39:58

Beitrag von roli » 12.12.2004 13:57:20

Hi Leute,

noch leichter geht's meiner Meinung nach mit "mmv" multiple move!
Roland


"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"

Benutzeravatar
QT
Beiträge: 1322
Registriert: 22.07.2004 21:08:02
Wohnort: localhost

Beitrag von QT » 12.12.2004 21:06:32

roli hat geschrieben:noch leichter geht's meiner Meinung nach mit "mmv" multiple move!
Und wie würde bei Nutzung von mmv im vorliegenden Fall die passende Kommandozeile lauten?

Ich kenne mmv, hab es aber noch nie wirklich verwendet...

roli
Beiträge: 3174
Registriert: 10.09.2003 17:39:58

Beitrag von roli » 15.12.2004 10:40:57

Hi,

auch wenn ich's nicht mag, aber ich muss dir hier und heute mit einem RTFM antworten. Ich sitze an einer Windoofs Kiste, und habe keine Möglichkeit nachzuschauen. Da ich mmv nicht so oft benutze, muss ich auch jedes mal in's Manual schauen. Wenn's nicht klappt, am Wochenende kann ich mal versuchen dir ein Beispiel zu geben, ob die Zeit dazu reicht weiss ich allerdings noch nicht.
Roland


"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 15.12.2004 11:42:17

wollte mmv einmal ausprobieren:

Code: Alles auswählen

mmv "[^.]" "#1.txt"

Antworten