moins avec la fonctionnalité de mise à jour du fichier

9

Je veux regarder un fichier qui est écrasé toutes les 5 minutes avec less. Comment puis-je faire lesssuivre le nouveau descripteur de fichier au lieu de conserver l'ancien affiché? watch "cat file"ne le fera pas car le fichier est trop long pour tenir dans une seule fenêtre de terminal.

d135-1r43
la source
2
"Suivre" implique de suivre la fin du fichier. Vous souhaiterez peut-être préciser que votre fichier est écrasé et vous souhaitez le rouvrir.
chutz
Je voulais dire suivre le descripteur de fichier, tel qu'il est défini dans tail -fla page de manuel de. Mais néanmoins j'ai clarifié ma question.
d135-1r43
Utilisez less --follow-namevoir unix.stackexchange.com/a/74287/112522
djsutho

Réponses:

10

Vous pouvez obtenir cet effet en exécutant la Fcommande ( Shift+F) tout en affichant le fichier dans less. Pour arrêter de suivre et revenir à la pagination, appuyez surCtrl+C

Étant donné que votre fichier ne change que toutes les 5 minutes, vous pouvez également utiliser tail -fet spécifier une durée de veille plus longue avec -s(par défaut 1 seconde). Par exemple,

tail -f -s 60 myfile

vérifie la myfilesortie toutes les 60 secondes.

EDIT: En raison d'une question trompeuse, la réponse ci-dessus n'était pas satisfaisante. La deuxième tentative suit:

Pour rouvrir le même fichier lesstoutes les 5 minutes, essayez ceci:

while true; do ( sh -c 'sleep 600 && kill $PPID' & less myfile ); done

Cela générera un sous-shell qui met en arrière-plan un autre processus shell chargé de tuer son processus parent après 5 minutes. Ensuite, il ouvre le fichier avec less. Lorsque la commande shell en arrière-plan tue le sous-shell parent, elle tue tous ses enfants, y compris la commande «moins». Ensuite, la boucle recommence le processus.

Le seul moyen simple que je connaisse pour tuer ceci est de tuer le terminal dans lequel se trouve votre shell d'origine. Si cela est inacceptable, vous pouvez utiliser l'astuce "killfile":

touch killfile
while [ -f killfile]; do stuff; done

Pour arrêter de faire stuff, rmle killfile dans un autre shell.

bonsaiviking
la source
Ce n'est que partiellement utile pour mon cas. Le fichier regardé est très gros les informations mises à jour en haut. Ce n'est pas un fichier journal "défilant". Shift + F défile immédiatement jusqu'à la fin du fichier ...
d135-1r43
Vous devez modifier votre question pour clarifier. J'ai également modifié ma réponse pour y répondre.
bonsaiviking
watch -n 1 less <filename>
axel22
1

Vous pouvez faire quelque chose de similaire dans vim.

Démarrez une session serveur de vim:

vim -R --servername refresh_session

Ensuite, dans une autre console, surveillez le fichier pour les mises à jour et dites à la session vim de recharger le fichier dès qu'il est mis à jour:

inotifywait -e close_write -m your_log_file | while read filename events; do
    vim --servername refresh_session --remote $filename
done

Quelques accrochages.

  • Cela ne fonctionnera bien sûr pas si votre vimn'est pas compilé avec la clientserverfonctionnalité de.
  • inoifywaitcessera de fonctionner lorsque le fichier sera supprimé. J'espère donc que votre fichier sera écrasé. Il est possible de contourner cela aussi, bien sûr.

Et si vous souhaitez lessvivre une expérience plus similaire, vous pouvez utiliser les lessmacros pour obtenir vos lessraccourcis clavier vim.

/usr/share/vim/vim73/macros/less.sh --servername refresh_session
chutz
la source
0

J'ai trouvé un ancien, mais très bon programme "moins" (un "pager"). Il a une commande "R" qui rafraîchit le fichier.

Il s'appelle "lv" , vous pouvez l'installer sur Ubuntu en utilisant:

sudo apt install lv

Cependant, il ne semble pas avoir de fonction de chargement automatique.

Ronie
la source
-1

Vous pourriez essayer cette commande: fichier tail -f

FINESEC
la source
-1

Tail est votre ami. "tail -f filename" vous montrera de nouvelles lignes quand elles apparaîtront.

Ou si vous recherchez des modifications apportées au milieu du fichier, vous pouvez peut-être exécuter un script toutes les quelques minutes pour faire une copie du fichier vers un emplacement temporaire et faire une différence dessus?

David W
la source
Il était tout à fait clair, même dans le message d'origine, qu'il y avait un "nouveau fichier". Par conséquent, le descripteur de fichier aurait changé mais tail -fcontinuerait de lire l'ancien.
Alastair Irvine
Je ne pense pas que ce soit très juste. Pour être clair, nous devons regarder le message original, non édité, car si vous regardez la date de ma réponse, c'est la question à laquelle je répondais. Dans cette question non éditée, ma réponse est parfaitement logique. serverfault.com/posts/445899/revisions
David W
J'ai vérifié les révisions. Mots clés "nouveau fichier".
Alastair Irvine du