PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Feldtrenner-Problem



Fornax
22-12-2008, 08:22
Hallo allerseits,

ich hoffe ihr könnt einem Neuling bei c<ygwin (bash unter Windows) helfen :)

Folgendes Problem:
Ich habe eine Liste von Dateinamen und Pfaden; sie ist folgendermaßen aufgebaut:


Dateiname <TAB> Pfadname


Sowohl der Dateiname als auch der Pfadname enthält massig Leerzeichen. Insbesondere der Pfad ist sehr lang (was zu meinem ursprungsproblem geführt hat).

Meine Absicht jetzt: Ich muß die Dateien kopieren, und da der Pfad so lang ist, will ich dem Pfad auf Quelle und Ziel je einen Laufwerksbuchstaben zuordnen, die Datei kopieren, Laufwerksbuchstaben löschen, nächste Datei.

Mein Skript schaut bisher so aus:



#!/bin/bash

for i in `cat links.txt`
do
subst X: "L:/`cut -f2 $i`"
if test -d "/cygdrive/m/`cut -f2 $i`"; then
subst Y: "M:/`cut -f2 $i`"
# cp "/cygdrive/x/`cut -f1 $i`" "/cygdrive/y/"
else
mkdir "/cygdrive/m/`cut -f2 $i`"
subst Y: "M:/`cut -f2 $i`"
# cp "/cygdrive/x/`cut -f1 $i`" "/cygdrive/y/"
fi
subst X: /D
subst Y: /D
done


Mein Problem ist, daß das Skript jede Zeichenfolge bis zum Leerzeichen als Argument versteht oder alles auf einmal (je nachdem ob ich IFS=$'\n' setze oder nicht).
Wie krieg ich das hin, daß er in der Schleife jede Zeile abarbeitet?`
Ich hab bisher for i in liste.txt, for i in `grep / liste.txt` und for i in `cat liste.txt` probiert, nix hilft :(


Danke schon mal :)

undefined
22-12-2008, 14:56
Wenn du Leerzeichen im Datei/Ordner Namen verwendest dann musst diese explizit als String übergeben. Zu dem kannst du dann cat und for Schleife nicht verwenden.


while read -r l ; do
echo "'$l'"
done < links.txt

Fornax
23-12-2008, 12:24
Danke, ich werds mal so probieren :)