webForumDet fria alternativet

sftp put-kommando (via spawn/send) med tidsstämpelkontroll.

Webbutveckling

5 svar · 519 visningar · startad av sne1

Medlem sedan jan. 200363 inlägg
Frågan#1

Hej!

När jag spawn:ar sftp (i ett script som startas av crontab) och kör följande put-kommando...
send -- "put /var/backups/full_bu_total_*\r"
...förs alla mina full_bu_total_*-filer över från A till B. Fint.

Men, jag skulle vilja att BARA den fil som skapades aktuellt datum förs över, varför jag försökert mig på följande något justerade put-kommando...
send -- "put /var/backups/full_bu_total_*`date +'%Y-%m-%d'`.gz\r"
...vilket dessvärre inte fungerar, utan ger följande felmeddelande...
File "/var/backups/full_bu_total_*`date" not found.
Harangen (`date +'%Y-%m-%d'`) fungerar dock i andra sammanhang (scriptat tar-kommando), men sftp (spawn/send) verkar inte gilla den.

Är det någon där ute som har koll på vilken "harang" jag måste använda, för att filtrera ut dagens backup-fil?

TACK på förhand för hjälpen!

Medlem sedan juni 20014 290 inlägg
#2

Prova att dela upp det:

files = /var/backups/full_bu_total_*`date +'%Y-%m-%d'`.gz
send -- "put $files\r"

Alternativt:

files = /var/backups/full_bu_total_*`date +'%Y-%m-%d'`.gz
scp $files server:katalog

Då kan du också enkelt sätta in en "$echo $files" för att se om rätt fil tas.

Men för denna typen så skulle jag nog använda rsync's speglings funktion, då slipper jag ange specifika filnman utan den kopierar bara över ändrade filer.

Jag kör detta kommando på min server för att hålla en kopia på min NAS uppdaterad (använder SSH med nycklar som transport):

rsync -av --delete /root /export /etc /home /usr/local /var nas:/backup

Notera att tar jag bort en fil på servern så tas den också bort från NAS'en.

Medlem sedan jan. 200363 inlägg
#3

Ahhh...! Smart att kunna sätta en parameter - det kan jag ju nyttja även på andra ställen i mitt lilla jobb! Superduper! TACK kung GunnarD!

Medlem sedan jan. 200363 inlägg
#4

Nä, det gick inte...

invalid command name "files"
while executing
"files = /var/backups/full_bu_total_*`date +'%Y-%m-%d'`.gz"

Det blir tyvärr samma fel var i scriptet jag än gör parameter-tilldelningen (inom spawn eller före).

Hjälp...!?

Här är koden (<ALLT_INOM_PARENTES_ÄR_STRÄNGAR_SOM_JAG_INTE_VILL_VISA_HÄR>):

#!/usr/bin/expect -f
files = /var/backups/full_bu_total_*`date +'%Y-%m-%d'`.gz
spawn /usr/bin/sftp <USER>@<IPADDRESS>
expect "<USER>@<IPADDRESS>'s password:"
send -- "<PASSWORD>\r"
expect "sftp>"
send -- "cd /var/backups/<LIBRARY>\r"
expect "sftp>"
send -- "pwd\r"
expect "Remote working directory: /var/backups/<LIBRARY>"
#send -- "put /var/backups/full_bu_total_*\r"
files = /var/backups/full_bu_total_*`date +'%Y-%m-%d'`.gz
send -- "put $files\r"
expect "sftp>"
send "bye\r"

Medlem sedan juni 20014 290 inlägg
#5

Trodde du använde bash inte expect :)

För att slippa fippla med expect sätt up så att ssh/scp/sftp använder nycklar för autenticering så slipper du ha lösenord i klartext i en fil, och kommandot blir mycket enklare :)

sftp /var/backups/full_bu_total_*`date +'%Y-%m-%d'`.gz <IPADRESS>:/var/backups/<LIBRARY>

Om du vill fortsätta med expect så titta på kommandona set (som sätter en variabel) och timestamp (som formaterar en datumsträng på valfritt sätt).

ex:

set d [timestamp -format %Y-%m-%d]
set files var/backups/full_bu_total_*$d.gz

Ingen expert på expect och har inte expect på någon maskin men ovanstående borde fungera. :)

Medlem sedan jan. 200363 inlägg
#6

GRYMT TJUSIGT!

set d [timestamp -format %Y-%m-%d]
set files /var/backups/full_bu_total_*$d.gz

TACK!

265 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)