Grep not honor --exclude-dir


12

에 전화가 걸려서 검색하는 데 문제 /var/var/run있습니다. 제외/var/run 하려고했지만 예상 결과가 생성되지 않습니다.

$ sudo grep -IR --exclude-dir="/var/run" '45.78.157.165' /var | egrep -v '(audit|access)'
/var/log/secure:Jun 21 14:08:34 cryptopp sshd[19729]: error: Received disconnect from 199.91.135.157: 3: com.jcraft.jsch.JSchException: reject HostKey: 45.78.157.165 [preauth]
/var/log/secure-20160626:Jun 21 14:08:34 cryptopp sshd[19729]: error: Received disconnect from 199.91.135.157: 3: com.jcraft.jsch.JSchException: reject HostKey: 45.78.157.165 [preauth]
/var/log/secure-20160626:Jun 21 14:08:34 cryptopp sshd[19729]: error: Received disconnect from 199.91.135.157: 3: com.jcraft.jsch.JSchException: reject HostKey: 45.78.157.165 [preauth]
grep: /var/run/saslauthd/mux: No such device or address
grep: /var/run/dbus/system_bus_socket: No such device or address
grep: /var/run/rpcbind.sock: No such device or address
grep: /var/run/udev/control: No such device or address

난 둘 다 해봤 -exclude-dir=/var/run하고 -exclude-dir="/var/run". 둘 다 동일한 결과를 생성합니다.

왜 내 grep이 실패합니까?

/var/run재귀 grep에서 어떻게 제외 합니까?


Grep가 포함 된 CentOS 7.2 :

$ grep --version
grep (GNU grep) 2.20
Copyright (C) 2014 Free Software Foundation, Inc.

1
--exclude-dir=/var/run따옴표없이 시도해 보셨습니까 ?
JakeGould

@JakeGould-예; 유무에 관계없이. 질문에 추가하도록하겠습니다.
jww

@JakeGould 아무런 차이가 없습니다. grep프로세스는 두 경우 모두 따옴표를 보지 않습니다. Bash는 그것들을 확장하고 수행 할 대체물이 없으므로 단순히 제거됩니다. 내가 아는 모든 껍질의 경우입니다.
wchargin

답변:


18

나는 당신이 명시 적으로 요구하고 있기 때문에 아마 생각 grep재귀에서 검색 /var/var/run서브 디렉토리와 일치하지 않습니다 /var.

grep 매뉴얼 페이지를 참조하십시오.

--exclude-dir=glob
    [..] skip any subdirectory whose base name matches glob.  [..]

고치다

따라서 명령을 수정하려면 제외 패턴을 변경하십시오.

sudo grep -IR --exclude-dir="run" '45.78.157.165' /var | egrep -v '(audit|access)'

나는 이것과 비슷한 질문이 있습니다. grep -r --exclude-dir=./root/js sometext .현재 위치에서 하위 폴더를 제외하도록 어떻게 변경 하시겠습니까?
psynnott

3
/의 행동이 확실하지 않습니다 . grep은 각 폴더로 이동하여 해당 시점에서 검색을 시작합니다. 효과적으로 현재 폴더를 항상 검색합니다. 하위 폴더 (예 :)를 제외하고 /home/me/dev/project1/js여러 폴더에서 검색하는 경우 (예 :에서 시작 /home/me) 제외 할 하나의 기본 폴더 이름 (예 :)을 지정해야합니다 --exclude-dir=js. 불행하게도 이것은 계층의 다른 곳에서 같은 이름의 하위 폴더도 제외합니다. 더 많은 제어 기능이있는 것을 원하면 with 사용 find을 시도해 볼 수 있습니다 grep.
jehad
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.