2016-08-13 10 views
1

/var/log 디렉토리에 단순한 find 디렉토리를 압축하여 압축되지 않은 모든 syslog 파일을 찾으려고합니다. Unix가 정규식을 존중하지 않음을 찾음

syslog(\.[0-9]*)?$

그래서이 syslog, syslog.1, syslog.999 등 및 syslog.1.gz 또는 상기의 syslog의 패턴을 일치하지 않는 다른 것 같이 gzip으로 압축 된 로그를 건너 뛸 찾아 낼 것입니다 : 내가 지금까지 가지고하면 정규식입니다. 나도 꽤 기본 find 명령을하고 있어요 :

find /var/log -regextype posix-extended -regex "syslog(\\.[0-9]*)?$"

을하지만, 난 항상 빈 결과를 얻을! 자, 내가 쓴 정규식은 POSIX 확장 호환이라고 생각했지만 그렇지 않은 것 같습니다. 여기에 내가 실행 한 명령의 변화가 아무 소용 같습니다

find /var/log -regextype posix-extended -regex "syslog(\\.[0-9]*)?$"

sudo find /var/log -regextype posix-extended -regex "syslog(\\.[0-9]*)?$"

find /var/log -regextype posix-extended -regex "syslog"

find /var/log -regextype posix-extended -regex "(syslog)"

디렉토리에있는 모든 파일을 나열하여 예상대로 작동 다음이, 그러나, 그래서 나는 나의 명령 형식이 정확하다는 것을 안다. 내가 잘못 뭐하는 거지

find /var/log -regextype posix-extended -regex ".*"

?

답변

2

제공하는 정규식 패턴은 전체 경로와 일치해야합니다. 즉 처음에 앵커 할 필요가없고 ^$으로 끝나야한다는 의미입니다. 이미 양 끝 부분에 암시 적으로 고정되어 있습니다. 그러나 을 수행하려면.* 또는 유사한 패턴을 나머지 부분이 처음이 아닌 다른 부분과 일치해야한다면 (.인데도 find 경로에 항상 경로가 포함된다는 것을 기억해야합니다).

find . -regextype posix-extended -regex '.*syslog(\.[0-9]*)?' 

이 맞습니다.

+0

아 나는 당신이 부분 일치를 할 수 없다는 것을 몰랐습니다. 고맙습니다! 수락 됨. –