Comment puis-je faire la queue mais seulement en lignes entières?

J’ai un fichier journal énorme en permanence (MainLog).

Je veux créer un autre fichier qui ne représente que les n dernières lignes du fichier journal, MAIS aussi la mise à jour.

Si j’utilise:

tail -f MainLog> RecentLog

J’ai presque tout ce que je veux, sauf que RecentLog est écrit comme MainLog est disponible et pourrait à tout moment seulement avoir une partie de la dernière ligne MainLog.

Comment puis-je spécifier à la queue que je veux seulement qu’elle écrive quand une ligne complète est disponible?

Par défaut, tail génère des lignes entières sauf si vous utilisez le commutateur -c pour compter les caractères. Quelque chose comme

  tail -n 20 -f MainLog > RecentLog 

(remplacer le nombre de lignes que vous voulez append au premier fichier par “20”) devrait fonctionner comme vous le souhaitez.

Mais si ce n’est pas le cas, il est possible que l’utilisation de grep pour aligner votre sortie sur une ligne corrige cette situation. Voir cette question .

Après plusieurs tentatives, la seule solution pour plusieurs fichiers qui a fonctionné (de manière fantastique) pour moi est la commande fdlinecombine . C’est un petit binary qui lit plusieurs descripteurs de fichiers et imprime les données sur la sortie standard.

Mon cas d’utilisation génère plusieurs commandes ssh longue durée en arrière-plan et suit leur sortie, sans que les lignes ne soient tronquées ou interrompues entre elles.