정규식을 사용하여 bash에서 파일 이름을 일치시키는 방법은 무엇입니까? 즉, tail -f /var/log/(syslog|mail.log)

정규식을 사용하여 bash에서 파일 이름을 일치시키는 방법은 무엇입니까? 즉, tail -f /var/log/(syslog|mail.log)

나는 평생 동안 이와 같은 명령을 입력해 왔습니다.

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계속됩니다 . 그러나 여러 파일이 동시에 처리됩니다. .file1file2multitailsudo apt install multitail;man multitail

관련 정보