작업 중인 각 코드베이스에 대해 서로 다른 플래그 세트를 자동으로 생성하는 방법이 있는지 궁금합니다 --exclude-dir
.grep
한 프로젝트에서는 디렉토리에서 검색하고 싶지 않고 다른 프로젝트에서는 디렉토리에서 검색 output/
하고 싶지 않기 때문입니다. checkpoints/
소스 코드가 아닌 코드가 포함된 폴더가 코드 베이스에 있는 경우가 많기 때문에 항상 수동으로 입력해야 합니다(예: grep --exclude_dir {onedir, twodir, threedir} ...
).
--exclude-dir
이상적으로는 내가 속한 코드베이스에 대해 grep이 명령줄에서 호출할 때마다 grep
옵션을 자동 완성하는 항목을 확인할 수 있는 파일이 있을 것입니다 . 이렇게 하면 매번 제외하기 위해 긴 디렉터리 이름 목록을 입력할 필요가 없습니다. 디렉터리 이름은 현재 작업 중인 프로젝트에 따라 다릅니다.
기존 항목에서 읽을 수 있으면 괜찮습니다 .gitignore
.
답변1
나는 사용하는 것이 좋습니다립그렙바꾸다 grep
. 많은 장점 중 하나는
기본적으로 ripgrep은 gitignore 규칙을 존중하고 숨겨진 파일/디렉토리 및 바이너리를 자동으로 건너뜁니다.
.gitignore
따라서 현재 디렉터리의 파일뿐만 아니라 .gitignore
git에서 사용하는 전역 파일 도 존중합니다 .
기본적으로 모든 자동 필터링을 비활성화하려면 다음을 사용하십시오.rg -uuu
답변2
다음 스크립트는 나를 위해 일했습니다
#!/bin/bash
if [ -r .grepignore ]; then
while read -r line; do
if [[ "$line" =~ '#' ]] || [[ "$line" =~ ^$ ]]; then
continue
fi
EXCLUDE="$EXCLUDE --exclude-dir=\"$line\""
done < .grepignore
fi
eval grep -r "$EXCLUDE" '"$@"'
이 스크립트는 파일이 .grepignore
존재하고 읽을 수 있는지 확인합니다. 그렇다면 EXCLUDE
파일의 모든 행에 대해 (선행 및 후행 공백 없이)을 포함하는 문자열을 생성합니다. 단, 비어 있지 않거나 를 포함하면 스크립트는 해당 문자열을 전달하고 제공된 매개변수를 스크립트에 추가합니다.--exclude-dir="$line"
$line
#
EXCLUDE
grep
스크립트를 실행하려면 코드를 파일에 저장하고 를 mygrep
사용하여 실행 가능하게 만든 다음 을 chmod +x /path/to/mygrep
사용하여 호출하고 /path/to/mygrep
, 그 뒤에 제공하려는 옵션 grep
과 검색어를 입력하세요.
답변3
--exclude-from=FILE
이 깃발이 바로 당신이 찾고 있는 것 같습니다 . FILE
각 프로젝트별 항목을 수동으로 생성하고 다음 항목으로 채워야 합니다 .
onedir/*
twodir/*
grep
편의를 위해 런타임에 플래그가 자동으로 호출 되도록 셸 별칭을 만들 수도 있습니다 --exclude-from=FILE
.