Seguir un archivo a través de FTP

11

Estoy intentando acceder a archivos de registro grandes en un servidor remoto desde mi escritorio de Windows. Yo solamente tengo acceso FTP para esta máquina remota, no el acceso SSH.

Por el momento, estoy usando WinSCP para extraer todo el archivo a través de FTP. Esto significa que tengo que transferir el archivo completo cada vez. Sin embargo, dado que es un archivo de registro, es probable que solo necesite las últimas líneas.

Esto es particularmente frustrante, ya que mi ancho de banda está muy limitado, por lo que transferir todo el archivo lleva unos minutos.

Si tuviera acceso de shell, esto podría lograrse fácilmente usando algo como tail -100obtener las últimas 100 líneas.

Me gustaría encontrar una solución para realizar esto a través de FTP. Tenga en cuenta que no tiene que ser una cola continua, solo una sola vez sería suficiente.

jwa
fuente

Respuestas:

8

Lo que quieres hacer, definitivamente se puede hacer con FTP. Técnicamente es lo mismo que cualquier cliente FTP cuando reanuda una descarga de archivos interrumpida.

Aunque desde la perspectiva del usuario, no sé, si algún cliente FTP admite una descarga explícita de solo un número dado de bytes finales.

Pero algunos clientes FTP definitivamente le permitirán descargar nuevos contenidos finales del archivo que haya descargado previamente.

Particularmente con WinSCP, simplemente inicie la descarga de un archivo de registro. Luego, en el mensaje de confirmación Sobrescribir , seleccione Reanudar (está en el menú desplegable del botón No ). Tenga en cuenta que la opción está obviamente disponible, solo si el archivo de origen es más grande que el archivo de destino.

Si realmente desea descargar solo las últimas líneas del registro, puede engañar a WinSCP, creando un archivo local ficticio con un tamaño un poco más pequeño que el archivo de registro antes de iniciar la descarga.

También puede automatizar fácilmente el truco anterior:

fsutil file createnew mylog.log 100000000
winscp.com /command "open mysession" "get -resume /path_to_log/mylog.log" "exit"

Para alternativas al fsutil, vea ¿ Crear rápidamente un archivo grande en un sistema Windows?

Con un mayor esfuerzo, puede modificar el script para verificar primero el tamaño del archivo de registro y calcular automáticamente el tamaño del archivo ficticio unos kilobytes más pequeño que el tamaño del registro.

Martin Prikryl
fuente
0

No sé cómo puede hacer esto usando WinSCP, y de hecho puede que no sea posible, pero en general, debería poder usar el comando REST . Ver RFC 3659 . Sin embargo, no tengo claro si puede comenzar a descargar desde el final del archivo o si ya debe haber recibido los marcadores. RFC 3659 indica que esto es posible, al menos en modo STREAM, aunque:

Las transferencias en modo STREAM con FILE STRUcture pueden reiniciarse aunque no se haya transferido ningún marcador de reinicio además de los datos en sí. Esto se hace utilizando el comando SIZE, si es necesario, en combinación con el comando RESTART (RESTART) y uno de los comandos estándar de transferencia de archivos.

ChrisInEdmonton
fuente
0

No escuché sobre ningún software que respalde sus necesidades. Pero si usted es programador, debe entender cómo escribir esto en Perl.

Aquí encontré un ejemplo de cómo obtener todos los archivos. Esta no es tu resolución, pero te ayuda a entender cómo hacerlo: http://www.perlmonks.org/?node_id=907019

otro, ayuda para la biblioteca Net :: FTP: http://search.cpan.org/dist/libnet/Net/FTP.pm

Con esto, puede abrir la conexión ftp al servidor (primer ejemplo) hacer la autorización (primer ejemplo)

la segunda URL le ayuda a obtener la última parte del archivo usando métodos: -> ascii establece el modo de transferencia en ascii porque este es un archivo de registro -> tamaño (ARCHIVO) obtiene el tamaño del archivo para contar dónde debe comenzar -> reiniciar (DONDE) establecer el archivo Cursor de dónde en el archivo que desea comenzar a leer -> leer (BUFFER, SIZE [, TIMEOUT]) leer directamente la pequeña parte SIZE en la variable BUFFER

otras funciones: la longitud (BUFFER) te dice cuántos datos obtienes. Si es CERO, es probable que haya alcanzado el contenido del búfer de impresión simple EOF print ("$ BUFFER \ n") en la pantalla

Tenga en cuenta que esto no es una resolución completa, sino una forma de hacerlo. La única razón por la que escribo todo esto es que probablemente no hay software listo para su tarea.

Si no sabe cómo escribir ese programa, simplemente pregunte en stackoverflow.com, no en superusuario. Hay muchos programadores que están listos para recibir ayuda.

Si es posible, verifique que su sitio ftp admita la reanudación de la descarga. Sin este final de lectura, la parte del archivo es imposible.

Otra resolución parcial puede ser la rotación del archivo de registro, un archivo por día o una hora. esto depende de qué tan rápido crezca el archivo de registro.

Znik
fuente