Newsgroup: it.comp.os.linux.development
Titolo: Aiuto su batch renaming via sftp in shell script

Ciao,
devo scrivere uno script ksh all'interno all'interno del quale (tra le altre
cose)
è richiesto quanto segue:
1 - collegamento automatico a macchina remota via sftp
2 - rename dei file contenuti in dir remota, mettendogli prefisso STK
3 - download di tutti i file contenuti in dir remota con prefisso STK
4 - remove di tutti i file nella dir remota con prefisso STK
Lo script dovrebbe sostanzialmente essere il seguente, però ci sono delle
cose che non vanno:
#!/bin/ksh
REMOTE_HOST=...
REMOTE_DIR=...
LOCAL_DIR=...
sftp $REMOTE_HOST << EOF
cd $REMOTE_DIR
!cd $REMOTE_DIR; for name in *; do mv $name STK$name; done
lcd $LOCAL_DIR
mget STK*
rm STK*
bye
EOF
L'auto login dell'sftp funziona. Ho creato su client la chiave pubblica via
ssh-keygen e poi l'ho aggiunta a .ssh/authorized-keys sulla macchina
remota.
Il rename va fato con ciclo for poiché, a differenza di ftp, il rename di
sftp non riconosce i caratteri jolly.
I problemi sono:
1) Sembra che $REMOTE_DIR venga vista come variabile vuota tra
i comandi sftp;
2) nel ciclo for non funziona la mv in quanto $name è una stringa vuota.
Qualcuno ha idea di come aggiungere un prefisso a file remoti via sftp
o tramite qualche altro metodo?
Ciao,
Antonio

 2) nel ciclo for non funziona la mv in quanto $name è una stringa vuota.
Hai provato, giusto per curiosità, ma anche "a scopo debugging", a fare una
cosa simile?: (vedi nota di sopra: non so se è bash-only, o sh generica.. tu
prova a mettere ksh se proprio devi! :) )
---8<---
#!/bin/bash
REMOTE_HOST=...
REMOTE_DIR=...
LOCAL_DIR=...
TMPFILE=$(mktemp -t myftp.XXXX) || exit 1
echo "cd $REMOTE_DIR" >> $TMPFILE
for name in *
do
	echo "mv $name STK$name" >> $TMPFILE
done
echo "lcd $LOCAL_DIR" >> $TMPFILE
echo "mget STK*" >> $TMPFILE
echo "rm STK*" >> $TMPFILE
echo "bye" >> $TMPFILE
sftp $REMOTE_HOST << $TMPFILE
--->8---
Alla fine dovresti anche rimuovere $TMPFILE... però lì lo lasci per vedere che
comandi passa a sftp...
Facci sapere!
David
P.S.: scritto su due (e con i) piedi, e magari invece di tutti quegli echo si
potrebbe fare una cosa tipo heredoc...
-- 
 . ''`.  Debian maintainer | 
http://wiki.debian.org/DavidPaleino
 : :'  : Linuxer #334216 --|-- 
http://www.hanskalabs.net/
 `. `'`  GPG: 1392B174 ----|---- 
http://snipr.com/qa_page
   `-   2BAB C625 4E66 E7B8 450A C3E1 E6AA 9017 1392 B174

 TMPFILE=$(mktemp -t myftp.XXXX) || exit 1
Riguardo mktemp:
$ man mktemp
MKTEMP(1)                                                              MKTEMP(1)
NAME
       mktemp - make temporary filename (unique)
SYNOPSIS
       mktemp [-V] | [-dqtu] [-p directory] [template]
DESCRIPTION
       The mktemp utility takes the given filename template and overwrites a
       portion of it to create a unique filename.  The template may be any
       filename with some number of ‘Xs’ appended to it, for example
       /tmp/tfile.XXXXXXXXXX.  If no template is specified a default of
       tmp.XXXXXXXXXX is used and the -t flag is implied (see below).
[..]
$ dpkg -S bin/mktemp
mktemp: /bin/mktemp
$ apt-cache show mktemp | grep Priority
Priority: required
$
Quindi, se lavori su una Debian (o una -like, suppongo), mktemp te lo ritrovi
*sicuramente*... altrimenti, YMMV.
Ciao,
David
