Welcome, Guest. Please login or register.
Did you miss your activation email?

Author Topic: [DE] Verzeichnis aus Datei erzeugen  (Read 11168 times)

Offline cas

  • User
  • Posts: 401
[DE] Verzeichnis aus Datei erzeugen
« 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
« Last Edit: 2018/06/25, 15:34:20 by cas »

Offline Geier0815

  • User
  • Posts: 593
Re: Verzeichnis aus Datei erzeugen
« Reply #1 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.
Wenn Windows die Lösung ist...
kann ich dann bitte das Problem zurück haben?

Offline melmarker

  • User
  • Posts: 2.799
    • g-com.eu
Re: Verzeichnis aus Datei erzeugen
« Reply #2 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 ... ;))
Those who would give up essential Liberty, to purchase a little temporary Safety, deserve neither Liberty nor Safety. (Benjamin Franklin, November 11, 1755)
Never attribute to malice that which can be adequately explained by stupidity. (Hanlons razor)

Offline cas

  • User
  • Posts: 401
Re: Verzeichnis aus Datei erzeugen
« Reply #3 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

Offline cas

  • User
  • Posts: 401
Re: Verzeichnis aus Datei erzeugen
« Reply #4 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

Offline melmarker

  • User
  • Posts: 2.799
    • g-com.eu
Re: Verzeichnis aus Datei erzeugen
« Reply #5 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
Those who would give up essential Liberty, to purchase a little temporary Safety, deserve neither Liberty nor Safety. (Benjamin Franklin, November 11, 1755)
Never attribute to malice that which can be adequately explained by stupidity. (Hanlons razor)

Offline Geier0815

  • User
  • Posts: 593
Re: Verzeichnis aus Datei erzeugen
« Reply #6 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.
Wenn Windows die Lösung ist...
kann ich dann bitte das Problem zurück haben?

Offline melmarker

  • User
  • Posts: 2.799
    • g-com.eu
Re: Verzeichnis aus Datei erzeugen
« Reply #7 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
Those who would give up essential Liberty, to purchase a little temporary Safety, deserve neither Liberty nor Safety. (Benjamin Franklin, November 11, 1755)
Never attribute to malice that which can be adequately explained by stupidity. (Hanlons razor)