config find 명령은 특정 디렉토리를 제외합니다.

config find 명령은 특정 디렉토리를 제외합니다.

find명령에서 특정 디렉터리를 영구적으로 제외하도록 구성하는 방법 .https://stackoverflow.com/questions/4210042/how-to-exclude-a-directory-in-find-command bashrc에 다음 별칭을 추가해 보았습니다.

alias find='find -not \( -path ./.git -prune \)'

작동하지 않는 것 같습니다.

ripgrep에서 이를 구성할 수 있습니다.https://github.com/BurntSushi/ripgrep/blob/master/GUIDE.md#configuration-file 그렇다면 git과 같은 특정 디렉터리를 한 번에 제외하도록 make find를 구성하는 방법은 무엇입니까?

답변1

myfind다음과 같은 래퍼 스크립트 로 작성하겠습니다 .

#! /bin/sh -
predicate_found=false skip_one=false
for arg do
  if "$skip_one"; then
    skip_one=false
  elif ! "$predicate_found"; then
    case $arg in
      (-depth | -ignore_readdir_race | -noignore_readdir_race | \
       -mount | -xdev | -noleaf | -show-control-chars) ;;
      (-files0-from | -maxdepth | -mindepth) skip_one=true;;
      (['()!'] | -[[:lower:]]?*)
        predicate_found=true
        set -- "$@" ! '(' -name .git -prune ')' '('
    esac
  fi
  set -- "$@" "$arg"
  shift
done
if "$predicate_found"; then
  set -- "$@" ')'
else
  set -- "$@" ! '(' -name .git -prune ')'
fi
exec find "$@"

옵션이 아닌 첫 번째 조건자 앞에 삽입 ! ( -name .git -prune )하고(또는 조건자를 찾을 수 없는 경우 끝에) 를 사용하지 않도록 (및 사이에 나머지를 래핑합니다 .)-o

예를 myfind -L . /tmp /etc -maxdepth 1 -type d -o -print들어 가 됩니다 find -L . /tmp /etc -maxdepth 1 ! '(' -name .git -prune ')' '(' -type d -o -print ')'.

그건prune모두 .git목차. FreeBSD를 사용하여 인수로 전달된 각 디렉토리에 대해 깊이가 1인 디렉토리만 제거 find하려면 .-depth 1-name .git

.git-mindepth 2일부 (또는 2보다 큰 숫자)를 추가하면 결국 디렉토리가 탐색될 수 있습니다.

-prune와 결합 (또는 암시) 할 수 없다는 점에 유의하세요.-depth-delete-depth


1 여기서 GNU 관리하기find 옵션 술어콘텐츠 앞에 콘텐츠를 삽입하면 경고가 표시되지 않습니다. 이를 위해 휴리스틱을 사용합니다. BSD를 사용하면 속을 수 있다myfind -f -my-dir-starting-with-dash-...

답변2

디렉터리를 무시하도록 구성할 수는 없습니다 find. 이는 작동 방식이 아닙니다. 그러나 함수를 사용할 수 있습니다(매개변수를 허용하려면 함수가 필요하므로 별칭이 아님). 별칭을 추가하려는 쉘 초기화 파일에 다음을 추가하십시오.

my_find(){
  path="$1"
  shift
  find "$path" -not \( -path ./.git -prune \) "$@"
}

그런 다음 다음과 같이 실행할 수 있습니다.

my_find /target/path -name something 

이 접근 방식의 중요한 단점은 항상 대상 경로를 제공해야 하며 기본적으로 현재 디렉터리에서 검색할 수 없다는 것입니다.

관련 정보