---
title: "sftp put-kommando (via spawn/send) med tidsstämpelkontroll."
type: "forum-thread"
url: "https://www.webforum.nu/amne/webbutveckling/183855-sftp-put-kommando-via-spawn-send-med-tidsstämpelkontroll"
topic: "Webbutveckling"
topic_url: "https://www.webforum.nu/amne/webbutveckling"
author: "sne1"
published: "2010-06-16T06:24:41.000Z"
updated: "2010-06-16T10:40:51.000Z"
replies: 5
views: 548
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/webbutveckling/183855-sftp-put-kommando-via-spawn-send-med-tidsstämpelkontroll"
---

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

## #1 — sne1, 2010-06-16T06:24Z

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!

Permalänk: https://www.webforum.nu/p/183855

## #2 — GunnarD, 2010-06-16T07:01Z

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.

Permalänk: https://www.webforum.nu/p/2240684

## #3 — sne1, 2010-06-16T07:08Z

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!

Permalänk: https://www.webforum.nu/p/2240686

## #4 — sne1, 2010-06-16T07:28Z

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"

Permalänk: https://www.webforum.nu/p/2240689

## #5 — GunnarD, 2010-06-16T09:18Z

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. :)

Permalänk: https://www.webforum.nu/p/2240707

## #6 — sne1, 2010-06-16T10:40Z

GRYMT TJUSIGT!

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

TACK!

Permalänk: https://www.webforum.nu/p/2240716

---

Tråden på webben: https://www.webforum.nu/amne/webbutveckling/183855-sftp-put-kommando-via-spawn-send-med-tidsstämpelkontroll
