He proporcionado mi propia respuesta a continuación.
Tenemos varios scripts de bash que funcionan bien con SFTP, lo que me gustaría hacer es simplemente redirigir un ls o dir de una carpeta a un archivo en nuestro servidor SFTP.
Podemos ejecutar esto como un trabajo cron o puedo ejecutarlo manualmente. Puedo ver la lista de archivos desde el servidor remoto, pero quiero generar la lista de archivos desde el servidor remoto al servidor local en un archivo de texto. .
Esto es lo que tengo para el script bash hasta ahora. El cuarto eco que se enumera a continuación es la línea en cuestión.
#!/bin/bash
localpath=/home/localacct/somepath
remotelocation=/home/account/logs/archive
remotehost=' [email protected]'
echo > $localpath/list.sftp
echo "cd $remotelocation " >> $localpath/list.sftp
echo "dir *.* " >> $localpath/list.sftp
echo "dir *.* > $localpath/dirlist.txt " >> $localpath/list.sftp
echo "bye " >> $localpath/list.sftp
sftp -b $localpath/list.sftp $remotehost
exit
shell-script
rsync
sftp
Leptonador
fuente
fuente

ssh $remotehost ls > $localpath/list.sftpRespuestas:
El
sftpcomando es muy limitado. Si no puede hacer que haga lo que quiere, puede usar otro enfoque, que es montar el directorio remoto con el sistema de archivos SSHFS . SSHFS utiliza SFTP como protocolo de transporte, por lo que el lado del servidor solo ve un cliente SFTP. Debe poder usar FUSE en el lado del cliente.Con SSHFS, monta el directorio remoto en un directorio vacío existente y usa comandos comunes.
fuente
Esto funciona de lejos el mejor:
Puede reenviar la salida a un archivo mediante
fuente
echo 'ls -1a' | sftp hostnameen caso de que alguien encuentre
rsyncque no funciona (para reports.paypal.com en mi caso) encontré el siguiente script usandoexpecttrabajos:Esto está en Mac. En otros sistemas, las
sedlíneas podrían prescindir de los primeros''argumentos.fuente
El
dircomando dentro delsftpcliente no admite la redirección. Ejemplo a continuación, que muestra cómo no hace nada.Página de
sftpmanual para confirma.fuente
Hay otra forma que terminé usando ... Intente usar rsync.
Encontramos lo siguiente:
El script BASH se convierte en:
y funciona muy bien!
fuente
rsyncutilizassh(por lo tanto, supone que el usuario remoto tiene acceso de shell), nosftp(un subsistema de ssh que no requiere que el usuario tenga acceso de shell) y supone quersyncestá instalado en la máquina remota. Así que bien podría hacerlossh user@host ls /dir > fileTambién puedes usar
lftp:O
lftptambién tiene unfindcomando para el listado recursivo.Pasar contraseñas en la línea de comando es generalmente una mala idea. La alternativa es usar la autenticación de clave ssh si es posible (la contraseña anterior se ignorará si la autenticación de clave está disponible, por lo que se convierte en la cadena vacía). O puede pasarlo por el medio ambiente:
O pase los comandos a través de stdin, aquí usando un documento here (implementado con archivos temporales eliminados o tuberías según el shell):
fuente
Entonces también puedes usar este método (con un ejemplo diferente):
fuente
..lugar deremotelocation? (3) ¿Has probado esto? ¿Realmente produce resultados razonables? Pregunto porque espero queecho "$a"funcione mucho mejor queecho $a. (4) ¿El nombrefctsignifica algo?No puedo agregar un comentario pero publico un nuevo comentario de respuesta sobre mi última respuesta.
Sí, lo sé, pero es solo un ejemplo del método, pero escribo esto tan rápido que normalmente prefiero escribir
echo "${a}", lo usols -la ..porque quería probar mi sshd_config (ChrootDirectory) pero reescribo esto mejor:fuente