각 프로젝트에 대한 사용자 정의 grep 제외 디렉터리

각 프로젝트에 대한 사용자 정의 grep 제외 디렉터리

작업 중인 각 코드베이스에 대해 서로 다른 플래그 세트를 자동으로 생성하는 방법이 있는지 궁금합니다 --exclude-dir.grep

한 프로젝트에서는 디렉토리에서 검색하고 싶지 않고 다른 프로젝트에서는 디렉토리에서 검색 output/하고 싶지 않기 때문입니다. checkpoints/소스 코드가 아닌 코드가 포함된 폴더가 코드 베이스에 있는 경우가 많기 때문에 항상 수동으로 입력해야 합니다(예: grep --exclude_dir {onedir, twodir, threedir} ...).

--exclude-dir이상적으로는 내가 속한 코드베이스에 대해 grep이 명령줄에서 호출할 때마다 grep옵션을 자동 완성하는 항목을 확인할 수 있는 파일이 있을 것입니다 . 이렇게 하면 매번 제외하기 위해 긴 디렉터리 이름 목록을 입력할 필요가 없습니다. 디렉터리 이름은 현재 작업 중인 프로젝트에 따라 다릅니다.

기존 항목에서 읽을 수 있으면 괜찮습니다 .gitignore.

답변1

나는 사용하는 것이 좋습니다립그렙바꾸다 grep. 많은 장점 중 하나는

기본적으로 ripgrep은 gitignore 규칙을 존중하고 숨겨진 파일/디렉토리 및 바이너리를 자동으로 건너뜁니다.

.gitignore따라서 현재 디렉터리의 파일뿐만 아니라 .gitignoregit에서 사용하는 전역 파일 도 존중합니다 .

기본적으로 모든 자동 필터링을 비활성화하려면 다음을 사용하십시오.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#EXCLUDEgrep

스크립트를 실행하려면 코드를 파일에 저장하고 를 mygrep사용하여 실행 가능하게 만든 다음 을 chmod +x /path/to/mygrep사용하여 호출하고 /path/to/mygrep, 그 뒤에 제공하려는 옵션 grep과 검색어를 입력하세요.

답변3

--exclude-from=FILE이 깃발이 바로 당신이 찾고 있는 것 같습니다 . FILE각 프로젝트별 항목을 수동으로 생성하고 다음 항목으로 채워야 합니다 .

onedir/*
twodir/*

grep편의를 위해 런타임에 플래그가 자동으로 호출 되도록 셸 별칭을 만들 수도 있습니다 --exclude-from=FILE.

관련 정보