단어의 순서가 중요하지 않은 여러 단어가 포함된 파일 찾기

단어의 순서가 중요하지 않은 여러 단어가 포함된 파일 찾기

많은 하위 폴더가 포함된 거대한 폴더가 있는데 세 단어가 포함된 폴더를 검색하고 싶습니다. 폴더 이름에는 세 단어가 모두 포함되어야 하지만 단어 순서는 중요하지 않습니다.

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' "$@"

ksh93glob 한정자는 없지만 /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을 아무것도 확장하지 않게 만듭니다.
  • globstarzsh의 재귀 와일드카드 연산자를 만들고 이해 ksh93합니다 .bash**/
  • (x~^Y), @(X&Y), !(!(X)|!(Y))존재하다두 패턴과 일치하는 파일을 일치시키는 각 셸의 세 가지 방법.

관련 정보