Script zum ersetzen von Zeichen in Dateinamen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
hanz
Beiträge: 18
Registriert: 28.08.2006 19:42:34

Script zum ersetzen von Zeichen in Dateinamen

Beitrag von hanz » 07.11.2006 15:58:02

Hi Leute,

Ich möchte mit nem kleinen Script ein paar Dateien in einem Verzeichnis umbenennen. Alle "." will ich entfernen:
#!/bin/sh
for i in `ls *.mpg`
do
BRUM=`echo $i | sed s/$1/$2/g`
echo "alt $i"
echo "Trennor"
echo "neu $BRUM"
echo "trenn0r"
sleep 5
mv $i $BRUM
Cont=`expr $Cont + 1`
done
exit 0
Folgendes Problem: wenn ich per $1 einen "." übergebe, und per $2 ein "_" dann ersetzt er mir alle Zeichen ! mit andern Zeichen gehts :(

nepos
Beiträge: 5238
Registriert: 05.01.2005 10:08:12

Beitrag von nepos » 07.11.2006 16:00:22

Klar, sed nutzt einen hier einen regulaeren Ausdruck und in regulaeren Ausdruecken hat der Punkt die Bedeutung "jedes beliebige Zeichen". Du musst den Punkt mittels \ escapen, damit sed ihn als das Zeichen Punkt sieht und nicht als Spezialzeichen fuer die Regex.

PS: Wieso schreibst du dir sowas selbst btw? Das Kommando rename macht genau das, was du willst.

hanz
Beiträge: 18
Registriert: 28.08.2006 19:42:34

Beitrag von hanz » 07.11.2006 16:40:13

ok thx, mit rename gehts :) kannte den Befehl nicht, und mit google bin ich auf sed gekommen, deshalb.

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

Beitrag von roli » 08.11.2006 09:45:17

Hi,

mit "mmv" (multiple move) sollte das auch gehen.
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
McAldo
Moderator
Beiträge: 2069
Registriert: 26.11.2003 11:43:36
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Terra / Sol-System / Milchstraße

Beitrag von McAldo » 08.11.2006 10:32:02

Wie wäre es mit diesem Bash-Aufruf:

Code: Alles auswählen

for i in *; do j=`echo "$i" | sed 's/\. //g'`; if [ "$i" != "$j" ]; then mv "$i" "$j"; fi; done
McAldo
Achte auf deine Gedanken, denn sie werden Worte.
Achte auf deine Worte, denn sie werden Handlungen.
Achte auf deine Handlungen, denn sie werden Gewohnheiten.
Achte auf deine Gewohnheiten, denn sie werden dein Charakter.
Achte auf deinen Charakter, denn er wird dein Schicksal.
(Talmud)

Antworten