私は一生の間このようなコマンドを入力してきました。
tail -f /var/log/syslog /var/log/mail.log /var/log/mail.err
おそらく非常に基本的な質問かもしれませんが、答えを見つけるのに苦労しています。
毎回場所を再入力せずにフォルダ内の複数のファイルを一致させる正規表現方法はありますか?
これは数回のキーストロークを節約しましたが、それほど多くはありませんでした。
export LOGDIR=/var/log
tail -f $LOGDIR/syslog $LOGDIR/mail.log $LOGDIR/mail.err
時にはいくつかの場所が欲しいときがあります...次のようなものを見つけたいと思います。
tail -f /var/log/(mail*|syslog|nginx/*)
(しかし実際にはその目的を達成します)
答え1
支柱の拡張を使用してください。
tail -f /var/log/{mail*,syslog,nginx/*}
例:
$ tree
├── mail.err
├── mail.log
├── nginx
│ ├── a
│ ├── b
│ └── c
├── notthis
└── syslog
$ echo {mail*,syslog,nginx/*}
mail.err mail.log syslog nginx/a nginx/b nginx/c
答え2
存在するbash
:
shopt -s extglob ## enable extend-glob if not enabled; default is "on"
tail -f /var/log/+(syslog|mail.+(log|err))
または明らかに:
tail -f /var/log/+(syslog|mail*)
これはファイル名のグローバルマッチングであり、ファイルにのみ適用されるため、ファイル拡張子を使用しないでください。道あなたが言ったように、nginx/*
代わりに中括弧拡張に基づいた解決策と答えを使うことを好むかもしれません。クワジモドあるいは、コマンドの別の引数として明示的に区切ります。
tail -f /var/log/+(syslog|mail*) /var/log/nginx/*
答え3
「完了」(なし)に達するまで実行がtail -f file1 file2
続行されます。ただし、複数のファイルが同時に処理されます。 。file1
file2
multitail
sudo apt install multitail;man multitail