Mehrere Dateien umwandel?

tiptel170

Tripel-As
Beiträge
166
Hallo Leute,

ich habe mir ein kleines script geschrieben, welches mir eine vcf-datei in ein datenbank-format automatisch umwandelt.

Jetzt habe nicht eine vcf-datei auf meinem rechner, sonder mehrere.

Wie kann ich es realsieren, mittels der for schleife dass mir alle vcf-dateien umgewandelt werden?

Hier ein auschnitt von meinem script:

Code:
# Anfang
USER="ms"
BENUTZER="$USER"
HOST="127.0.0.1"
DC="dc=casa,dc=red"
BasisDN="ou=Addresses,uid=$BENUTZER,ou=Users,$DC"
INV="/tmp/inverssuche_$BENUTZER"
VCFF="/mnt/Daten-1/Markus/vcf/Hallo_Welt.vcf"
MANA="Administrator"
PASSWD="geheim"
DNIM="cn=$MANA,$DC"

ERRVNNN="Vor- u. Nachname eintragen!"

#dn: cn=Vorname Nachname;ouc=Adresses,uid=username,ou=Users,dc=casa,dc=red Erstellen:
cat $VCFF | grep "^N\(:\|;\|;CHARSET=UTF-8\)" | sed -e "s/N;CHARSET=UTF-8://" | sed -e "s/N://" | tr ';' '\12' | tr -d '\r' > $INV/ldapdn1.ldif

...

# Endteil

ldapadd -h $HOST -x -D "$DNIM" -w $PASSWD < $INV/address.ldif


if ( test -f $INV/address.ldif )
then
rm $INV/address.ldif.
if ( ( test -f $INV/ldapaddr30.ldif ) || ( test -f $INV/ldapaddr21.ldif ) || ( test -f $INV/ldapaddr30-.ldif ) || ( test -f $INV/ldapaddr21-.ldif ) )
then
rm $INV/ldapaddr*.ldif
fi
echo "DONE..."
fi

Die variable VCFF da soll immer die nächste vcf-datei eingetragen werden.

Gruss tiptel170
 

tiptel170

Tripel-As
Beiträge
166
Niemand ne lösung?

Vielleich mal andersherum:

Ich habe z.B. 3 txt dateien, derren inhalt ist getrennt mittels ";". Nun möchte ich die drei dateien alle mit dem ";" umwandeln z.B. in ":". Ohne, dass ich das script änder muss.

BSP:
1. Datei test.txt
12;56 => soll ersetzt werden dur 12:56

2. Datei 34test.txt
hhh;ztr => hhh;ztr

3. Datei hollo.txt
get;gtr => get:gtr

und so weiter...

Geht das habe mit for schleife probiert, allerdings bis jetzt noch keinen erfolg.

Gruss tiptel170
 

saeckereier

Graue Eminenz
Beiträge
1.920
Seltsam.. Generelles Beispiel klappt direkt in der Kommandozeile (bash, nicht bezogen auf deine Fragen):
Code:
for i in * ; do
echo $i
done
Das * wird dabei durch alle Dateien und Ordner durch die Bash ersetzt.
 

tiptel170

Tripel-As
Beiträge
166
Ich habe hier ein kleines script geschrieben, für zwei dateien:

Code:
#!/bin/sh

A=*.txt
for D1 in $A ; do
cat $D1 | sed -e 's/;/:/g' > $A
done

Es wird mir nur eine datei mit derren inhalt umgewandelt und dann als *.txt ausgegeben. Dass sollte nicht sein, sondern beide dateien müssen gewandelt werden.

Gruss tiptel170
 

rikola

Foren Gott
Beiträge
2.133
Code:
#!/bin/sh

for D1 in *.txt ; do
cat $D1 | sed -e 's/;/:/g' > $D1
done
So besser? Unter gnu-sed kannst Du auch auf 'cat' und die Umleitung verzichten, indem Du die Option '-i' benutzt.
 

tiptel170

Tripel-As
Beiträge
166
Danke für die info. Werd es mal probieren in der "großen" datei. In der test-datei habe ich es probiert.
 

tiptel170

Tripel-As
Beiträge
166
Nun ja, in dem script funktioniert es nicht so wie ich es möchte. Hier mal der anhang.
 

Anhänge

  • vcftoldap.txt
    16,8 KB · Aufrufe: 7

rikola

Foren Gott
Beiträge
2.133
Nun ja, in dem script funktioniert es nicht so wie ich es möchte. Hier mal der anhang.

Ich kann es ohne input-Datei nicht testen, und da ich nicht weiss, was Du moechtest, faellt es mir auch schwer, zu sagen, was Du an dem Skript aendern muesstest. Allerdings faellt mir auf, dass Du die Variable VCFF als eine Datei definierst und dann eine Schleife ueber diese eine Datei laufen laesst. Das ist ja relativ witzlos:
Code:
VCFF="$INV/addr-ldap.vcf"
...
for D1 in $VCFF ; do
Ausserdem koennte es helfen, wenn Du in der ersten Zeile bash statt sh eintraegst - sh ist im Vergleich zu den anderen handelsueblichen Shells doch ein wenig eingeschraenkt.
 

tiptel170

Tripel-As
Beiträge
166
Die fehlermeldung lautet:

Code:
./vcftoldap.txt: line 483: syntax error near unexpected token `done'
./vcftoldap.txt: line 483: `done'

@rikola

Generiere dir doch mal eine vcf-datei und trage diese dann ein. Natürlich die ldap-einstellungen abändern!

Diese datei macht aus einer vcf eine ldif und trägt die adress-daten ein ein ldap-server ein.

Witz los ist das ganze nicht! Es soll mir helfen ca. 200 -300 vcf-dateien in ldif umzuwandeln. Das mit der for schleife ist ein test, ich weiss nicht genau wo ich es "einbauen" muss, damit es funktioniert.

Denn 200 dateien händisch in das script ein zutragen - wahnsinn und dauert zu lange!


Gruss tiptel170
 

rikola

Foren Gott
Beiträge
2.133
Ich weiss nicht, was eine vcf-Datei ist und welches Format sie hat. Der Farbgebung meines vi nach ist das 'done' am Ende der Datei unausbalanciert. Ich tippe auf ein fehlendes 'fi':
Code:
tg@nachtigaller:~/downloads$ grep -c -w if vcftoldap.txt 
38
tg@nachtigaller:~/downloads$ grep -c -w fi vcftoldap.txt 
37
obwohl das natuerlich ein Artefakt sein koennte.
 

tiptel170

Tripel-As
Beiträge
166
Eine ganz normal visittenkarten datei mit version 2.1 oder 3.0 kann beide versionen "übersetzen" in ldif.
 

tiptel170

Tripel-As
Beiträge
166
Das mit dem if, welches zu viel war, hat sich erledigt. Lag an der abfrage, wenn die vcf-datei vorhanden ist, dass das scrpit abgearbeitet wird.

Allerdings hänge ich immer noch an dem selbem problem :-( :-(
 

rikola

Foren Gott
Beiträge
2.133
Das mit dem if, welches zu viel war, hat sich erledigt. Lag an der abfrage, wenn die vcf-datei vorhanden ist, dass das scrpit abgearbeitet wird.

Allerdings hänge ich immer noch an dem selbem problem :-( :-(

"normal" gehoert zu meinen Lieblingswoertern und faellt in die gleiche Kategorie wie "alle", "immer" und "nie".
Wenn ich Dein Skript ausfuehre (mit einem eingefuegten 'fi') bekomme ich seitenweise Fehlermeldungen ueber nicht existierende Verzeichnisse und Dateien. Bevor ich oder jemand anderes hier im Forum das Skript jetzt fuer sein eigenes System anpasst, schlage ich daher vor, dass Du die Fehlermeldung, die Du bekommst, hier angibst, um dem Problem so naeher zu kommen.
 

tiptel170

Tripel-As
Beiträge
166
Bitte die ldapwerte anpassen! Hier an bei die korrigierte Datei. Ist jetzt nur für eine vcf-datei! Gruss tiptel170
 

Anhänge

  • vcftoldap.txt
    19 KB · Aufrufe: 5

rikola

Foren Gott
Beiträge
2.133
Eigentlich wolltest Du doch nur wissen, wie Du Deine Skript fuer alle vcf-Dateien benutzen kannst, ohne sie von Hand eintragen zu muessen. Die Frage hat doch saeckereier Dir beantwortet, wo liegt denn dann noch Dein Problem?
 

tiptel170

Tripel-As
Beiträge
166
Das problem liegt darin, sobald ich die [for] eintrage und am ende das [done] dan kommt immer die fehlermeldung wie zu vor beschrieben.
 

saeckereier

Graue Eminenz
Beiträge
1.920
Musst du ja auch nicht.. Ich würde das Skript gar nicht unbedingt modifizieren sondern einfach dein Skript in einer For-Schleife ausführen.. Meistens macht man sowas direkt auf der Kommandozeile (for i in *; do skript $i; done) oder man kann das ja auch in ein extra Skript tun. Ist das einfachste... Ich muss aber auch gestehen, ich hab mir dein Skript nicht angeguckt, weil ich in den letzten Tagen nicht hier war..
 

Ähnliche Themen

Samba 3.6.25 - OpenLDAP Setup

Hilfe für ein shell script

Problem mit HSPA+ Modem Huawei E353 - Installation unmöglich?

Shellskript - Fehler in Cron

Windows clients können nicht mehr auf lange laufendes System zugreifen

Oben