Siduction Forum

Siduction Forum => Scripting & Kernelhacking => Topic started by: cas on 2018/06/25, 15:27:54

Title: Verzeichnis aus Datei erzeugen
Post by: cas on 2018/06/25, 15:27:54
Hallo,
ich muss häufig viele Verzeichnisse erzeugen. Das möchte ich automatisieren.
Die Namen der Verzeichnisse stehen in einer Textdatei namens 'toc.txt', zB
Code: [Select]
Verz1
Verz2
Verz3
oder auch in einer Zeile
Code: [Select]
Verz1 Verz2 Verz3

Solange die Verzeichnisnamen aus _einem_ Wort bestehen, kann ich
Code: [Select]
mkdir $( cat toc.txt )
eingeben.

Häufig sieht toc.txt aber so aus:
Code: [Select]
Verz mit mehreren Worten
AnderesVerz aus versch Worten

Wie kann ich also jede Zeile  als einen GesamtString ausgeben und diesen dem mkdir-Befehl übergeben?
Mit einfachen oder doppelten Anführungszeichen bin ich nicht weitergekommen.

Bis jetzt helfe ich mir so:
Code: [Select]
"Verz mit mehreren Worten" "AnderesVerz aus versch Worten"dh die Namen werden mit Anführungszeichen eingeklammert und alles in einer Zeile.  Schliesslich wird mit Cut&Paste diese Zeile mkdir übergeben.
Ich hoffe, dass dies einfacher geht

Grüße, C
Title: Re: Verzeichnis aus Datei erzeugen
Post by: Geier0815 on 2018/06/25, 21:00:53
Code: [Select]
#!/bin/bash
IFS=$'\n'
for i in `sed "/*/p" < toc.txt`
do
    mkdir $i
done

Als Beispiel mit sed, sollte aber auch mit cat gehen. Der Trick ist den InputFieldSeperator von "alle whitespaces" auf "Zeilenumbruch" zu setzen. Verfeinern in der Form das der Listenname übergeben werden kann und irgendwelche Rückmeldungen überlasse ich dir.
Title: Re: Verzeichnis aus Datei erzeugen
Post by: melmarker on 2018/06/25, 22:25:48
Und wat der @Geier0815 vergessen hat - ganz wichtig - den IFS wieder zurücksetzen nach der Verarbeitung - immer, ob man es grad braucht oder nicht - das muss in Fleisch und Blut übergehen, sonst schießt man sich damit früher oder später fürchterlich ins Knie. (Fragt nicht nach, ich weiss, wovon ich rede ... ;))
Title: Re: Verzeichnis aus Datei erzeugen
Post by: cas on 2018/06/25, 23:11:27
Besten Dank!

Sofern die Verzeichnisnamen mit Anführungszeichen eingeklammert sind, geht auch
Code: [Select]
cat toc.txt | xargs mkdir
Grüße, C
Title: Re: Verzeichnis aus Datei erzeugen
Post by: cas on 2018/06/25, 23:32:36
IFS wieder zurücksetzen nach der Verarbeitung

Ich nehme an, dieses Zurücksetzen läuft per
Code: [Select]
IFS=$' \t\n'

habe gerade mal nachgesehen. Da scheint es mehrere falsche Möglichkeiten zu geben
Title: Re: Verzeichnis aus Datei erzeugen
Post by: melmarker on 2018/06/26, 01:42:18
Wenn man es als no-brainer haben will
Code: [Select]
OLDIFS=$IFS
IFS=foo
Verarbeitung
IFS=$OLDIFS

Ausführlicher hier: https://stackoverflow.com/questions/4128235/what-is-the-exact-meaning-of-ifs-n
Title: Re: Verzeichnis aus Datei erzeugen
Post by: Geier0815 on 2018/06/26, 08:40:59
Ich mag mich ja täuschen aber da für das Skript eine Subshell erzeugt wird und diese nichts an den Elternprozess durch reicht, sollte mit Beendigung des Skripts IFS in der aufrufenden Shell unberührt sein. Oder sitze ich da einem Irrtum auf?

Aber sicherlich ist es nicht verkehrt sich um so etwas Gedanken zu machen, der Teufel ist bekanntlich ein Eichhörnchen. Es gibt ja auch skript-Aufrufe die es direkt in der aktuellen shell ausführen. Von daher: Danke für den ergänzenden Hinweis.
Title: Re: Verzeichnis aus Datei erzeugen
Post by: melmarker on 2018/06/26, 10:14:24
Ich mag mich ja täuschen aber da für das Skript eine Subshell erzeugt wird und diese nichts an den Elternprozess durch reicht, sollte mit Beendigung des Skripts IFS in der aufrufenden Shell unberührt sein. Oder sitze ich da einem Irrtum auf?

Du irrst Dich nicht - und dann nimmst Du den Schnipsel und baust ihn irgendwo anders ein oder erweiterst das Script - ist mir nicht nur einmal passiert :D