답변:
--exclude-dir
명령 행에 파일을 나열 할 필요가 없습니다. grep
표준 입력을 기다리고 있기 때문에 "매달려" 있습니다.
grep -l -e 'foo'--exclude-dir = ". svn" *
기본적으로 ack을 사용하여 .svn
유사한 폴더 를 제외 하고 다른 많은 기능을 가지고 있습니다.
--recursive .
OP에 이미 GNU가있는 것으로보고 대신 대신 사용하고 싶을 수도 있습니다 grep
.
shopt -s dotglob
으로 Bash에 *
이미 도트 파일이 포함되어 있습니다. -r
좋은,하지만 ack
않습니다 기본적으로 너무 :)
ack에 관심이있을 수 있습니다 . 재귀 검색 (및 기타 grep 유사 작업)을 수행 하며 기본적 으로 .svn 또는 .git 와 같은 디렉토리는 제외합니다 .
ag
비슷하지만 빠르지 만을 사용합니다.
당신은 같은 디렉토리에 grep을하지 않으려면 .svn
지금 당신이 설정할 수 $GREP_OPTIONS
아래로 제외 할 변수를 :
export GREP_OPTIONS="--exclude-dir=\*/.svn/\*"
이 줄을 당신에게 추가하면 .bashrc
재귀 그렙은 더 이상 .svn
디렉토리에 들어 가지 않습니다 . 물론 원하는만큼 풍부 할 수 있습니다.
export GREP_OPTIONS="--exclude-dir=\*/.svn/\* --exclude-dir=\*/.hg/\* --exclude-dir=\*/.git/\* --exclude=\*~"
awk 솔루션도 있습니다.
find . | awk '$0 !~ /.svn/{print}' | awk '/foo/{print}'
기본적으로 모든 파일에서 /.svn/와 일치하는 파일을 정리 한 다음 / foo /와 일치하는 파일 만 인쇄합니다. ls로 결과를 쉽게 사용할 수 있으므로이 솔루션을 좋아합니다. 예를 들어
ls -tl $(find . | awk '$0 !~ /.svn/{print}' | awk '/foo/{print}')
수정 날짜별로 정렬 된 목록보기를 봅니다. 또한 결과로 다른 작업을 수행하려는 경우 결과의 전체 경로를 갖는 것이 좋습니다 (열거 나 실행하는 등).
*
하면.
더 깨끗합니다.