`ls` 일치 패턴에서 하나의 디렉토리 제외 것입니다). 하나의

내부에 파일 ls이있는 디렉토리를 시도하고 .png있습니다 (재귀가 필요하지는 않지만 더 유용 할 것입니다). 하나의 디렉토리 즉,

ls */*.png

잘 작동합니다.

ls (^one)*/*.png

stdout을 리턴하지 않습니다. 어떻게하면 되나요?

나는 장님이고 그것을에 배관하기 espeak때문에 지금은 표준 음 만들을 수 있습니다.



답변

옵션 1- 그냥 사용 ls:
확장 bash globbing을 켜면 ( shopt -s extglob) 다음을 수행 할 수 있습니다.

ls !(one*)/*.png

옵션 2- 결합 lsgrep:

당신 ls과 결합 할 수 있습니다grep -v

  • 예 : ls */*.png | grep -v "one/"

옵션 3- (최고의 IMO)이지만 다음을 사용 find하지 않습니다 ls.

다음을 사용하여 모든 하위 디렉토리의 재귀 검색 find

find . -type f -name "*.png" -not -path "*/one/*"

위의 모든 단일 라이너는 .png경로 일치를 필터링하는 동안 파일이있는 디렉토리를 나열합니다 one/. 옵션 3 만이 작업을 재귀 적으로 수행합니다.


답변

에서 zsh을 넣어 setopt extended_glob당신에 ~/.zshrc. 그런 다음 와일드 카드 패턴 ^one 을 사용하여 라는 디렉토리를 제외 할 수 있습니다 one.

ls ^one/*.png

하위 디렉토리로 재귀를 원하면 **/재귀 globbing에 사용하십시오. one최상위 디렉토리뿐만 아니라 최상위 디렉토리에서 호출 된 디렉토리를 제외하려면 다음을 수행하십시오.

ls ^one/**/*.png

one서브 디렉토리의 파일이 아닌 이라는 서브 디렉토리에서 파일을 제외 시키려면 다음을 수행하십시오.

ls **/^one/*.png

one임의의 레벨에서 호출 된 서브 디렉토리 에서 파일을 제외 시키려면 #부정 과 관련하여 연산자 와 반복 패턴을 사용하십시오 .

ls (^one/)#/*.png