여러 업데이트를 전달하는 방법! -찾을 경로 매개변수

여러 업데이트를 전달하는 방법! -찾을 경로 매개변수

find를 사용하여 검색할 때 무시하고 싶은 디렉터리/파일 목록이 포함된 파일이 있습니다. 다음과 같습니다.

.git
.vim
config
.vimrc
.bashrc

이 목록은 완전한 것이 아니며 원하는 수의 항목을 포함할 수 있습니다. .을 사용할 때 이러한 파일/디렉토리를 어떻게 무시할 수 있습니까 find?

이 작업을 시도했지만 find . -type f ! -path ...동적 목록을 매개변수로 전달할 수 없습니다.

답변1

확장 정규식(BSD, GNU)을 지원하는 구현을 사용하면 find다음을 수행할 수 있습니다.-regex-E -regex-regextype posix-extended -regex

find . -regextype posix-extended -regex "\./($(
  sed 's@[][\\|^$.*+?{}()]@\\&@g' < list | paste -sd '|' -))" -prune -o \( \
    -type f -print \)

이는 이러한 파일/디렉터리와 그 안에 있는 모든 파일/하위 디렉터리를 제외 find합니다 -prune.

..\..*

답변2

이에 대한 래퍼 함수를 ​​정의하겠습니다.

find_exclude(){
    while read -r ext; do set "$@" \! -name "$ext"; done
    find . -type f "$@"
}

$ find -type f
./config
./.vim
./dir/.git
./list
$ cat list
.vim
.git
config
$ find_exclude <list
./list

관련 정보