Mehrere Dateien umwandel?

T

tiptel170

Tripel-As
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
 
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
 
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.
 
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
 
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.
 
Danke für die info. Werd es mal probieren in der "großen" datei. In der test-datei habe ich es probiert.
 
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
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.
 
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
 
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.
 
Eine ganz normal visittenkarten datei mit version 2.1 oder 3.0 kann beide versionen "übersetzen" in ldif.
 
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 :-( :-(
 
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.
 
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
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?
 
Das problem liegt darin, sobald ich die [for] eintrage und am ende das [done] dan kommt immer die fehlermeldung wie zu vor beschrieben.
 
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

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

Shellskript - Fehler in Cron

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

Server will nicht in die Domain

Zurück
Oben