
Estoy intentando acceder a archivos de registro grandes en un servidor remoto desde mi escritorio de Windows. Isolotenga acceso FTP a esta máquina remota, no acceso SSH.
Por el momento, estoy usando WinSCP para descargar el archivo completo 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 es muy limitado, por lo que transferir el archivo completo lleva unos minutos.
Si tuviera acceso al shell, esto podría lograrse fácilmente usando algo como tail -100
obtener las últimas 100 líneas.
Me gustaría encontrar una solución para realizar esto vía FTP. Tenga en cuenta que no tiene que ser una cola continua, bastaría con una única.
Respuesta1
Lo que quieras hacer, definitivamente puedes hacerlo con FTP. Técnicamente es lo mismo que hace cualquier cliente FTP al reanudar la descarga de un archivo interrumpido.
Aunque desde la perspectiva del usuario, no sé si algún cliente FTP admite una descarga explícita de solo un número determinado de bytes finales.
Pero algunos clientes FTP definitivamente le permitirán descargar nuevos contenidos finales de archivos que haya descargado previamente.
Particularmente con WinSCP, simplemente inicie la descarga del archivo de registro. Entonces, en elSobrescribir mensaje de confirmación, Selecciona elReanudar(está en el menú desplegable delNobotón). Tenga en cuenta que la opción obviamente está disponible, sólo 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 puedes 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 a fsutil
, consulte¿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.
Respuesta2
No sé cómo puedes hacer esto usando WinSCP y, de hecho, puede que no sea posible, pero en general, deberías poder usar elDESCANSARdominio. VerRFC 3659. Sin embargo, no me queda claro si puede comenzar a descargar el archivo más tarde o si ya debe haber recibido los marcadores. Sin embargo, RFC 3659 indica que esto es posible, al menos en modo STREAM:
Las transferencias en modo STREAM con FILE STRUcture se pueden reiniciar aunque no se haya transferido ningún marcador de reinicio además de los datos en sí. Esto se hace usando el comando TAMAÑO, si es necesario, en combinación con el comando REINICIAR (REST) y uno de los comandos estándar de transferencia de archivos.
Respuesta3
No he oído hablar de ningún software que satisfaga sus necesidades. Pero si eres programador, deberías 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 ayudará 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
Al usar esto, puede abrir una conexión ftp al servidor (primer ejemplo) y realizar la autorización (primer ejemplo).
La segunda URL le ayuda a obtener la última parte del archivo usando los métodos: ->ascii establezca el modo de transferencia en ascii porque este es un archivo de registro ->tamaño ( ARCHIVO ) obtenga el tamaño del archivo para contar dónde debe comenzar ->reinicie ( DONDE ) establezca el archivo cursor desde dónde en el archivo desea comenzar a leer ->leer (BUFFER, TAMAÑO [, TIMEOUT]) lea directamente la parte pequeña de TAMAÑO en la variable BUFFER
Otras funciones: longitud (BUFFER) le indican cuántos datos obtiene. Si es CERO, probablemente alcanzó la impresión EOF ("$BUFFER\n") del contenido del búfer de impresión simple 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 haya ningún software preparado para su tarea.
Si no sabe cómo escribir ese programa, simplemente pregunte en stackoverflow.com, no en el 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 esta lectura la parte final del archivo es imposible.
Otra solución parcial puede ser la rotación de archivos de registro, un archivo por día o por hora. Esto depende de qué tan rápido crezca el archivo de registro.