Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : dateien kopieren und ...



hjn
13-01-2002, 10:10
hallo zusammen

ich habe ein problem und brauche eine lösung dafür.
ich habe in script programmierung nicht viel erfahrung.

ich habe einen linux suse 7.2 und eine ibm as/400 im netzwerk.
auf der as/400 lauft ein unter aix ein samba server.
ein verzeichnis ist freigegeben.

auf der as/400 werden in dem freigegebenen verzeichnis von
der as/400 dateien angelegt. anzahl der dateien 1 bis xxxxxxxx.
die datei-namen sind von der as/400 vergeben.
auf der as/400 können keine änderungen vorgenommen werden

so nun das problem

auf der linux maschine möchte ich im cron eine script eintragen
was folgendes macht.

1. sich zugriff auf das verzeichnis der as/400 beschaft.
(ip der as/400 "10.10.10.140" freigabename "uebergabe")

2. die datei bzw. die dateien auf die linux maschine kopieren.
(ob dateien bzw anzahl der dateien jeden tag verschieden)

3. die kopierten dateien auf der as/400 löschen.

4. die dateien umbenennen in 1.dat 2.dat 3.dat usw.
wichtig! die dateinamen sollen bei jedem aufruf weiter
gezählt werden.
(zähler abspeichern in eine datei)

5. zugriff auf die as/400 wieder freigeben.

es brauchen keine meldungen auf dem bildschirm erscheinen.
(höchstens zum testen)
am liebsten einen meldung in einer log datei speichern
ob alles geklappt hat oder ein fehler entstanden ist.

ich hoffe mir kann jemand helfen
dank im voraus hjn

fork
13-01-2002, 15:08
mal ein grober, ausbaufähiger Vorschlag:

- Temporäres Verzeichnis erstellen
- Samba-Freigabe einhängen(mount -t smbfs -o user=USERNAME,password=THEPASSWORD //as400/share /tmpdir)
- höchste nummer der Datei (###.dat) im Zielverzeichnis herausfinden

MAX=0
for FILE in $(ls $DEST_DIR/*.dat)
do
NR=$(echo $FILE|cut -f1 -d.)
[$NR -gt $MAX] && MAX=$NR
done
- neue Dateien verschieben


((FILE_NR=$MAX+1))
for FILE in $(ls /tmpdir/*)
do
mv /tmpdir/$FILE $DEST_DIR/${FILE_NR}.dat
((FILE_NR=$FILE_NR+1))
done
- Samba Verzeichnis aushängen
- Temporäres Verzeichnis löschen

ich würde vorschlagen bis es funktioniert erst mal mit einem Testverzeichnis mit Testdateien auszuprobieren,
nicht das irgendetwas verloren geht.
Fehlerkontrollen sind da natürlich noch keine besonderen drin, mal abgesehen davon das man die Fehler der aufgerufenen Befehle durch anhängen von >>/var/adm/as400-copy.log 2>>&1 an den Scriptaufruf protokollieren kann

Gruß
fork

hjn
14-01-2002, 18:57
besten dank
der vorschlag war genau das richtige.

ich habe schon ein richtig gutes script drumrum gebastelt.

nur eines lauft bei mir noch nicht
"höchste nummer der Datei (###.dat) im Zielverzeichnis herausfinden"

das ergebnis ist immer null
DEST_DIR ist bei mir "/update/daten"

gruß
hjn

fork
14-01-2002, 19:29
- schon mal "set -x" eingebaut?

- script mal hier rein stellen

hjn
14-01-2002, 21:15
hallo

verstehe ich nicht, was ist damit gemeint
"- schon mal "set -x" eingebaut?"
"- script mal hier rein stellen"

gruß
hjn

mightymike99
14-01-2002, 21:27
"set -x" ist der Shell-Debugger er zeigt Befehle unmittelbar nach Auflösung der Variablennamen, Auflösung generierter Dateinamen, Auflösung von Befehlssubstitutionen (also sowas: $(...) oder ` ...` ) an. Ist irgendwas falsch ersetzt worden sieht man das hier. Abschalten geht mit "set +x"

"- script mal hier rein stellen"
...damit ich es sehen kann, evtl. Fehler feststellen&ansprechen kann

hjn
14-01-2002, 21:56
hallo

das script
-----------------------------------------------
DEST_DIR=/update/daten
MAX=0
for FILE in $(ls $DEST_DIR/*.dat)
do
NR=$(echo $FILE|cut -f1 -d.)
[$NR -gt $MAX] && MAX=$NR
done
----------------------------------------------

ausgabe mit set -x
...
++ echo /update/daten/1000.dat
++ cut -f1 -d.
+ NR=/update/daten/1000
+ '[/update/daten/1000' -gt '0]'
./holen.sh: [/update/daten/1000: No such file or directory

++ echo /update/daten/1001.dat
++ cut -f1 -d.
+ NR=/update/daten/1001
+ '[/update/daten/1001' -gt '0]'
./holen.sh: [/update/daten/1001: No such file or directory
...

gruß
hjn

micha
14-01-2002, 22:15
DEST_DIR=/update/daten
MAX=0

for FILE in $(ls $DEST_DIR/*.dat)
do
NR=$(basename $(echo $FILE | cut -f1 -d.))
[ $NR -gt $MAX ] && MAX=$NR
done



Gruß micha

hjn
14-01-2002, 22:37
besten dank an alle

es läuft nun einwandfrei

jetzt werde ich versuchen etwas sicherheit
(fehlermeldungen) in das script einzubauen.

gruß
hjn