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