많은 하위 폴더가 포함된 거대한 폴더가 있는데 세 단어가 포함된 폴더를 검색하고 싶습니다. 폴더 이름에는 세 단어가 모두 포함되어야 하지만 단어 순서는 중요하지 않습니다.
APE
예: , 및 이라는 단어가 포함된 Banana
폴더를 찾고 싶습니다 Tree
.
find folder -name '*APE*Banana*Tree*'
그러나 이 명령은 단어의 순서를 고려하므로 흥미롭지는 않지만 이러한 단어가 어떤 순서로든 포함된 폴더를 찾고 싶습니다.
답변1
3초만 사용하세요 -name
.
find folder -name '*APE*' -name '*Banana*' -name '*Tree*' -type d
패턴에 와일드카드를 사용하는 것과 마찬가지로 -name
이름에 사용자 로케일에서 유효한 문자를 형성하지 않는 문자 시퀀스가 포함된 파일이 손실될 수 있습니다.
그리고 zsh
:
set -o extendedglob # best in ~/.zshrc
print -rC1 -- **/(*Banana*~^*APE*~^*Tree*)(ND/)
이것/
글로벌 예선find
디렉토리 -type d
유형 파일을 선택하는 것과 동일합니다 d
.
그리고 ksh93
:
FIGNORE='@(.|..)'
set -o globstar
set -- ~(N)**/@(*Banana*&*APE*&*Tree*)/
(($# == 0)) || printf '%s\n' "$@"
ksh93
glob 한정자는 없지만 /
glob에 a를 추가하면 디렉터리 파일이나 디렉터리 기호 링크로의 확장이 제한됩니다.
그리고 bash
:
shopt -s globstar dotglob nullglob extglob
set -- **/!(!(*Banana*)|!(*APE*)|!(*Tree*))/
(($# == 0)) || printf '%s\n' "$@"
ksh93
후행에 대해서는 위와 동일합니다 /
.
어디:
D
,FIGNORE
,dotglob
숨겨진 파일도 보고되는지 확인하세요(그렇습니다find
)N
,~(N)
,nullglob
일치하는 항목이 없는 경우 오류를 발생시키거나 자체적으로 확장하는 대신 glob을 아무것도 확장하지 않게 만듭니다.globstar
zsh의 재귀 와일드카드 연산자를 만들고 이해ksh93
합니다 .bash
**/
(x~^Y)
,@(X&Y)
,!(!(X)|!(Y))
존재하다두 패턴과 일치하는 파일을 일치시키는 각 셸의 세 가지 방법.