regex / sed problem

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
egx
Beiträge: 42
Registriert: 11.10.2004 17:04:32

regex / sed problem

Beitrag von egx » 12.09.2006 18:20:33

Hallo ihr Shellzauberer,
ich hab folgendes Problemchen:

Ein Haufen Dateien nach folgendem Muster:

Bla - Tag1.txt
Bla irgendwas - Morgen Nacht.txt
Was auch immer - Hallo.txt

Einzige Gemeinsamkeit der Trennstrich irgendwo im Dateinamen.

Was ich erreichen will:
Aus Dateinamen werden an der Stelle des Trennstriches Verzeichnamen generiert und die Dateien dann darin verschoben.
Aus "\test\Bla - Tag1.txt" soll z.B. "\test\Bla\Bla - Tag1.txt" werden.

Ich hab es schon mit diversen Kombinationen aus ls -1 | xargs, cut, sed und co versucht aber das beste Ergebnis bisher war dass alle Verzeichnisse erstellt wurden, mkdir aber bei "Bla irgendwas" die Verzeichnisse "Bla" und "irgendwas" anstelle von "Bla irgendwas" angelegt hat.

Dank voraus
egx

fuzzy
Beiträge: 1021
Registriert: 04.10.2003 12:15:52

Beitrag von fuzzy » 12.09.2006 20:33:32

Hallo egx,

mir fällt an der mkdir-Stelle dieses ein.

Code: Alles auswählen

fuzzy@free:/tmp$ mkdir 'bla irgendwas'
fuzzy@free:/tmp$ mkdir "bla nochwas"
fuzzy@free:/tmp$ ls -1
bla irgendwas
bla nochwas
Ich hoffe das hilft Dir erstmal weiter...

Gruß fuzzy

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

Beitrag von roli » 13.09.2006 09:31:41

Hi,

da deine Dateien ja alle ein - enthalten wuerde ich "cut" verwenden, den Delimter auf - setzten, und nur das erste Feld ausschneiden. Das was da rauskomt, sollte das sein was du suchst. Versuch's doch mal, wenn's nicht klappt einfach nochmal fragen.
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"

algol
Beiträge: 25
Registriert: 24.03.2006 08:18:16

Beitrag von algol » 13.09.2006 10:36:31

Mir fällt dazu nur ein kleines Skript ein. Als "reine" Pipe wird das schwierig... :?

Code: Alles auswählen

#!/bin/sh

ls -1|grep -- -|
while read line
do
    dir=$(echo $line |cut -d- -f1|sed 's/ *$//')
    file=$(echo $line|cut -d- -f2|sed 's/^ *//')
    mkdir -p "$dir"
    mv "$line" "$dir/$file"
done
Der grep dient dazu, wirklich nur Dateien zu erwischen, die ein "-" beinhalten, die "sed"s trimmen die jeweiligen Bestandteile, da du ja Blanks vor und nach dem "-" verwendest.

Nimms mal als "Anregung"...

egx
Beiträge: 42
Registriert: 11.10.2004 17:04:32

Beitrag von egx » 13.09.2006 13:00:02

Hallo zusammen!

Das kleine script von algol ist super!
(Es macht ja sogar noch mehr als ich wollte)

Der Vollständigkeit halber:
Mit cut ( cut -d - -f 1 ) bekomme ich zwar den "Input" für mkdir, habe es allerdings nicht geschafft die nötigen " anzufügen.

Falls noch jemand eine "reine Pipe" Lösung findet, es würde mich sehr interessieren wie das gelöst werden kann.

Also ein fröhliches Danke für die schnelle Hilfe Leute!
Grüße egx

Benutzeravatar
Savar
Beiträge: 7174
Registriert: 30.07.2004 09:28:58
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Berlin

Beitrag von Savar » 13.09.2006 13:16:35

wie willst du bei mehreren Dateien eine Pipelösung machen? Mal davon abgesehen kannst du auch algol's skript einfach in $( <SKRIPT> ) schreiben und dann ist das quasi wie ein Befehl...
MODVOICE/MYVOICE
Debianforum Verhaltensregeln
Log Dateien? -> NoPaste

Antworten