Main contents

Files mit Leerzeichen umbenennen

Sunday, October 28th, 2012

Kurze Linux Notiz: Ich habe eben ein Script geschrieben, dass in mehreren Filenamen die Leerzeichen durch Punkte ersetzt. Eine fortgeschrittenere Aufgabe als man auf den ersten Blick annehmen könnte.

IFS=$'\n';
for i in `ls Game*`;
do
cp "$i" `echo $i |sed 's+ +.+g'`;
done

Im Detail, die Umgebungsvariable IFS ist der „internal field separator“ Die Variable kontrolliert, wie Kommandozeilen Argumente getrennt werden. ( Der Standard würde in dem cp Befehl die einzelnen Teile an den zu entfernenden Lehrzeichen trennen.) Danach loope ich über die Files mit einer for Schleife und konstruiere in dem Schleifenbody den Kopierbefehl.1 Der Befehl

`echo $i |sed 's+ +.+g'`

Entfernt die Spaces aus dem Dateinamen, dafür braucht es zwei Tricks, einerseits muss man mittels der Pipe sed den Dateinamen auf dem stdin servieren, andererseits soll sed nicht Zeilenweise das erste Leerzeichen durch Punkte ersetzen, sondern jedes Leerzeichen, daher das g für global. Zusammengesetzt, zum Copy-Pasten ist der Befehl dann:

IFS=$'\n'; for i in `ls Game*`; do cp "$i" `echo $i |sed 's+ +.+g'`; done

  1. Eigentlich sollte man zum umbenennen mv nehmen, aber Kopieren und anschließendes Löschen erschien mir deutlich sicherer. []

This entry is filed under Uncategorized. You can follow any responses to this entry through the RSS 2.0 feed.You can leave a response, or trackback from your own site.