Hallo,

ich hab hier ein sehr wichtiges Problem mit einem Expect Script.
Das Script meldet sich auf einem sftp Server an und läd dort 1 Ordner hoch und 3 Ordner runter. ( Also den Inhalt der einzelnen Ordner )

Nun müssen aber alle kopierten Dateien die hochgeladen / runtergeladen wurden gelöscht werden. Da das Script alle paar Minuten laufen muss und ich somit nicht einfach ein "rm" auf Ordner/* machen kann, da ich sonst neue Dateien lösche die beim Ausführen des Scriptes in die Ordner gelegt wurden.

Die Chance das das passiert ist aufgrund der paar Minuten die zwischen Ausführung des Scriptes liegen sehr hoch.

Da man mit SFTP ja nicht verschieben kann wollte ich es über eine Variable lösen.
Ich wil also nun alle kopierten Dateien in eine Datei/Variable schreiben und dann sagen
rm $Variable damit nur die Dateien gelöscht werden die auch kopiert wurden.

Ein einfaches > ausgabe_datei geht ja nicht in expect so wie ich das sehe Sad

Hier mal das Script:


################################################## #####################
#!/usr/bin/expect -f

# Variablen setzen
set date [exec date +%m-%d-%y]
log_file /var/log/$date.kt_sftp.log

# Erlaeuterung zur Bedienung
if {$argc!=1} {
send_user "
usage: $argv0 Password \n
"
exit
}

# Zusaetzliche Optionen
set timeout -1
match_max 100000
#log_user 0

# Password einlesen
set pw [lindex $argv 0]

# sftp Verbindung herstellen
spawn sftp user@IP/Host

# Bei erster Verbindung "yes" zurueckgeben und dann das Passwort, ansonsten nur das Passwort
expect {
"*you sure you want to*" {
send "yes\r"
exp_continue
}
"*password:*"
}
send "$pw\r"

# Datein kopieren
expect "sftp>"
send "put Lokaler_Ordner1/* Externer_Ordner1/ \r"

expect "sftp>"
send "get Externer_Ordner2/* Lokaler_Ordner2/ \r"

expect "sftp>"
send "get Externer_Ordner3/* Lokaler_Ordner3/ \r"

expect "sftp>"
send "get Externer_Ordner4/* Lokaler_Ordner4/ \r"

# Session beenden
expect "sftp>"
send "exit \r"

expect eof
################################################## #####################


Wie kann ich nun die durch put und get kopierten Datein nach dem kopieren wieder löschen. Und NUR diese Datein löschen.
Also in eine Variable/Datei ausgeben und dann löschen der Datein die in der Variable/Datei stehen.

So habe ich mir das gedacht bekomme es aber nicht hin.


Über eine schnelle Hilfe wäre ihr sehr verbunden Smile

Gruß
Jochen