Mise en file d'attente d'un fichier via FTP

11

J'essaie d'accéder à des fichiers journaux volumineux sur un serveur distant à partir de mon bureau Windows. Je n'ai qu'un accès FTP à cette machine distante, pas un accès SSH.

Pour le moment, j'utilise WinSCP pour extraire le fichier entier sur FTP. Cela signifie que je dois transférer le fichier complet à chaque fois. Cependant, étant donné qu'il s'agit d'un fichier journal, je n'ai probablement besoin que des dernières lignes.

Ceci est particulièrement frustrant, car ma bande passante est sévèrement limitée, donc le transfert de tout le fichier prend quelques minutes.

Si j'avais un accès shell, cela pourrait facilement être réalisé en utilisant quelque chose comme tail -100pour obtenir les 100 dernières lignes.

Je voudrais trouver une solution pour effectuer cela via FTP. Notez qu'il ne doit pas nécessairement s'agir d'une queue continue, juste une seule fois serait suffisante.

jwa
la source

Réponses:

8

Ce que vous voulez faire peut certainement être fait avec FTP. Techniquement, c'est la même chose, ce que fait n'importe quel client FTP, lors de la reprise d'un téléchargement de fichier interrompu.

Bien que d'un point de vue utilisateur, je ne sais pas, si un client FTP prend en charge un téléchargement explicite d'un nombre donné d'octets de fin uniquement.

Mais certains clients FTP vous permettront certainement de télécharger de nouveaux contenus de fin de fichier que vous avez précédemment téléchargés.

En particulier avec WinSCP, lancez simplement un téléchargement de fichier journal. Ensuite, à l' invite de confirmation Overwrite , sélectionnez Resume (c'est dans le menu déroulant du bouton No ). Notez que l'option est évidemment disponible, uniquement si le fichier source est plus grand que le fichier de destination.

Si vous voulez vraiment télécharger uniquement les dernières lignes du journal, vous pouvez tricher WinSCP, en créant un fichier local factice avec une taille un peu plus petite que le fichier journal avant de lancer le téléchargement.

Vous pouvez également automatiser facilement l'astuce ci-dessus:

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

Pour des alternatives à la fsutil, voir Créer rapidement un fichier volumineux sur un système Windows?

Avec un effort supplémentaire, vous pouvez modifier le script pour vérifier d'abord la taille du fichier journal et calculer automatiquement la taille du fichier factice quelques kilo-octets de moins que la taille du journal.

Martin Prikryl
la source
0

Je ne sais pas comment vous pouvez le faire en utilisant WinSCP, et en effet ce n'est peut-être pas possible, mais en général, vous devriez pouvoir utiliser la commande REST . Voir RFC 3659 . Cependant, il n'est pas clair pour moi si vous pouvez commencer à télécharger depuis la fin du fichier ou si vous devez déjà avoir reçu les marqueurs. La RFC 3659 indique que cela est possible, au moins en mode STREAM, cependant:

Les transferts en mode STREAM avec FILE STRUcture peuvent être redémarrés même si aucun marqueur de redémarrage n'a été transféré en plus des données elles-mêmes. Pour ce faire, utilisez la commande SIZE, si nécessaire, en combinaison avec la commande RESTART (REST) ​​et l'une des commandes de transfert de fichiers standard.

ChrisInEdmonton
la source
0

Je n'ai entendu parler d'aucun logiciel répondant à vos besoins. Mais si vous êtes programmeur, vous devez comprendre comment écrire ceci en Perl.

Ici, j'ai trouvé un exemple pour obtenir tous les fichiers. Ce n'est pas votre résolution, mais cela vous aide à comprendre comment faire: http://www.perlmonks.org/?node_id=907019

une autre, l'aide pour la bibliothèque Net :: FTP: http://search.cpan.org/dist/libnet/Net/FTP.pm

en utilisant cela, vous pouvez ouvrir une connexion ftp au serveur (premier exemple) faire une autorisation (premier exemple)

la deuxième URL vous aide à obtenir la dernière partie du fichier à l'aide de méthodes: -> ascii définissez le mode de transfert sur ascii car il s'agit du fichier journal -> taille (FILE) obtenez la taille du fichier pour compter où vous devez commencer -> redémarrez (WHERE) définissez le fichier coursor d'où dans le fichier que vous voulez commencer à lire -> lire (BUFFER, SIZE [, TIMEOUT]) lire directement la petite partie SIZE dans la variable BUFFER

une autre fonction: la longueur (BUFFER) vous indique la quantité de données que vous obtenez. Si c'est zéro, vous avez probablement atteint le contenu du tampon d'impression simple EOF print ("$ BUFFER \ n") à l'écran

Remarquez, ce n'est pas complètement la résolution mais une façon de procéder. Une seule raison pour laquelle j'écris tout cela est qu'il n'y a probablement pas de logiciel prêt pour votre tâche.

Si vous ne savez pas comment écrire ce programme, demandez simplement sur stackoverflow.com, pas superutilisateur. Il existe de nombreux programmeurs prêts à vous aider.

Si c'est possible, vérifiez que votre site ftp prend en charge la reprise du téléchargement. Sans cette fin de lecture, une partie du fichier est impossible.

Une autre résolution partielle peut être la rotation des fichiers journaux, un fichier par jour ou une heure. cela dépend de la vitesse de croissance du fichier journal.

Znik
la source