find
( -name
/ -path
표준 술어의 경우)는 glob와 같은 와일드 카드 패턴을 사용합니다 ( {a,b}
glob 연산자는 아닙니다. 확장 후에는 2 개의 glob가 나타납니다). 주요 차이점은 슬래시 (및 점 파일 및 디렉토리에서 특별히 처리되지 않는)를 처리하는 것 find
입니다. *
globs에서는 여러 디렉토리에 걸쳐 있지 않습니다. */*/*
최대 2 단계의 디렉토리가 나열됩니다. 를 추가하면 -path './*/*/*'
최소 3 레벨 깊이의 파일과 일치하며 find
디렉토리의 내용을 깊이있게 나열하는 것을 중단하지 않습니다 .
그 특정
./foo*bar/quux[A-Z]{.bak,}/pic[0-9][0-9][0-9][0-9]?.jpg
몇 개의 glob, 번역하기 쉽고 깊이 3의 디렉토리를 원하므로 다음을 사용할 수 있습니다.
find . -mindepth 3 -maxdepth 3 \
\( -path './foo*bar/quux[A-Z].bak/pic[0-9][0-9][0-9][0-9]?.jpg' -o \
-path './foo*bar/quux[A-Z]/pic[0-9][0-9][0-9][0-9]?.jpg' \) \
-exec cmd {} +
(또는 -depth 3
일부 find
구현). 또는 POSIXly :
find . -path './*/*/*' -prune \
\( -path './foo*bar/quux[A-Z].bak/pic[0-9][0-9][0-9][0-9]?.jpg' -o \
-path './foo*bar/quux[A-Z]/pic[0-9][0-9][0-9][0-9]?.jpg' \) \
-exec cmd {} +
어떤 그 보장 것 *
과 ?
일치하지 않을 수 있습니다 /
문자.
( find
, globs와는 달리 foo*bar
현재 디렉토리에있는 디렉토리 이외의 디렉토리의 내용을 읽고 ¹ 파일 목록을 정렬하지 않습니다. 그러나 우리 가 잘못된 문자와 관련하여 일치 [A-Z]
하거나 *
/ 의 동작 ?
이 지정하지 않으면 동일한 파일 목록이 표시됩니다).
그러나 @muru가 보았 듯이 시스템 호출 find
의 한계를 극복 하기 위해 파일 목록을 여러 개의 실행으로 나누는 경우에만 의존 할 필요가 없습니다 execve()
. zsh
(포함 zargs
) 또는 ksh93
(포함 ) 과 같은 일부 쉘 command -x
은 기본적으로 지원합니다.
함께 zsh
(또한 그 globs와의 등가가 -type f
가장 다른 find
조건)를, 예를 들어 :
autoload zargs # if not already in ~/.zshrc
zargs ./foo*bar/quux[A-Z](|.bak)/pic[0-9][0-9][0-9][0-9]?.jpg(.) -- cmd
( (|.bak)
에 글로브 운영자 반하는 {,.bak}
는 (.)
것과 같습니다 규정 글로브 find
의 ' -type f
추가 oN
와 같은 정렬 건너 거기에 find
, D
- 파일을 점 (이 글로브 적용되지 않음) 포함)
¹ find
globs와 같이 디렉토리 트리를 크롤링하려면 다음과 같은 것이 필요합니다.
find . ! -name . \( \
\( -path './*/*' -o -name 'foo*bar' -o -prune \) \
-path './*/*/*' -prune -name 'pic[0-9][0-9][0-9][0-9]?.jpg' -exec cmd {} + -o \
\( ! -path './*/*' -o -name 'quux[A-Z]' -o -name 'quux[A-Z].bak' -o -prune \) \)
즉, 디렉토리를 제외한 레벨 1에서 모든 디렉토리를 제거foo*bar
하고 하나 quux[A-Z]
또는 둘을 제외한 레벨 2 에서 모든 디렉토리를 정리 quux[A-Z].bak
한 다음 pic...
레벨 3에서 디렉토리를 선택하고 해당 레벨에서 모든 디렉토리를 정리합니다.
-path
또는로 결과 식을 사용할 수 있어야합니다-ipath
.find . -path './foo*bar/quux[A-Z]/pic[0-9][0-9][0-9][0-9]?.jpg'
일치한다는 점을 제외하고 작동해야합니다/fooz/blah/bar/quuxA/pic1234d.jpg
. 그게 문제가 될까요?