es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Descargue únicamente los archivos nuevos con WinSCP.

Actualmente estoy escribiendo un script de WinSCP cuyo objetivo es recuperar todos los archivos de un servidor SFTP y luego colocarlos en una ubicación especificada en un servidor de destino (en el que se encuentra el script, para su información).

¿Hay alguien que pueda verificar si un archivo ya ha sido transferido al servidor de destino? ¿Se sobrescribe cuando lo está? En ese caso, ¿es realmente algo malo? En tal caso, supongo que si el archivo ya existe en el servidor de destino, no quiero que suceda nada. Si no existe, entonces me gustaría proceder con la transferencia.

Encontrará a continuación el código escrito hasta ahora:


Automáticamente abortar el script en caso de errores option batch abort Desactivar confirmaciones de sobrescritura que entran en conflicto con lo anterior option confirm off Conectar utilizando una contraseña open sftp://SERVER@IP<em>ADDRESS:PORT -privatekey="PRIVATE</em>KEY" -hostkey="HOSTKEY" -passive=off Cambiar el directorio remoto cd in cd DIRECTORY Forzar la transferencia en modo binario option transfer binary Obtener TODOS los archivos del directorio especificado get /<em>.csv</em> \DIRECTORY Eliminar todos los archivos .csv rm /*.csv Salir de WinSCP bye

Muchas gracias de antemano por su ayuda, espero que haya sido lo suficientemente claro, de lo contrario, por favor háganme saber si puedo proporcionarle información adicional.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para verificar si un archivo ya ha sido transferido al servidor de destino, se puede utilizar el comando synchronize en lugar de get. El comando synchronize no sobrescribe ningún archivo a menos que haya cambios en el archivo de origen.

    Si un archivo ya existe en el servidor de destino, no se sobrescribirá a menos que el archivo de origen haya cambiado. En caso de que se desee sobrescribir el archivo existente, se puede agregar el parámetro -delete en el comando synchronize.

    Aquí hay un código actualizado que utiliza el comando synchronize:

    # Abortar automáticamente el script en caso de errores
    option batch abort
    
    # Deshabilitar confirmaciones de sobrescritura que entran en conflicto con lo anterior
    option confirm off 
    
    # Conectar utilizando una contraseña 
    open sftp://SERVER@IP_ADDRESS:PORT -privatekey="PRIVATE_KEY" -hostkey="HOSTKEY" -passive=off 
    
    # Cambiar directorio remoto
    cd in/DIRECTORY
    
    # Forzar la transferencia en modo binario
    option transfer binary
    
    # Sincronizar todos los archivos del directorio remoto al directorio local
    synchronize local \\DIRECTORY -criteria=time -filemask=*.csv
    
    # Salir de WinSCP
    bye
    

    En el código anterior, -criteria=time comparará las marcas de tiempo de los archivos en ambos servidores y -filemask=*.csv solo transferirá archivos con extensión .csv.

    ¡Espero que esto pueda ser de ayuda!

Comments are closed.