`ls` 일치 패턴에서 디렉터리 제외

`ls` 일치 패턴에서 디렉터리 제외

나는 하나를 제외하고 내부에 파일이 ls있는 디렉토리를 가지려고 합니다 .png(특히 유용하지만 재귀는 필요하지 않습니다). 디렉토리를 제외합니다.

ls */*.png

잘 작동합니다.

ls (^one)*/*.png

표준 출력을 반환하지 않습니다. 어떻게 구현할 수 있나요?

눈을 멀게 하고 파이프를 연결하여 espeak지금 들을 수 있는 것은 표준 출력뿐입니다.

답변1

옵션 1- 다음만 사용 ls:
확장된 bash 와일드카드 열기( 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만 이 작업을 반복적으로 수행합니다.

답변2

존재하다다루기 힘든, 놓다setopt extended_glob당신의 ~/.zshrc. 그런 다음 사용할 수 있습니다와일드카드 패턴 ^one이름이 지정된 디렉터리를 제외합니다 one.

ls ^one/*.png

하위 디렉터리로 재귀적으로 이동하려면 **/재귀적 와일드카드를 사용하세요. 최상위 디렉터리 one와 최상위 디렉터리에서 호출된 디렉터리를 제외하려면 다음을 수행하세요.

ls ^one/**/*.png

이름이 지정된 하위 디렉토리의 파일을 제외 one하고 해당 하위 디렉토리는 제외하려면 다음을 수행하십시오.

ls **/^one/*.png

모든 수준에서 호출된 하위 디렉터리 아래의 파일을 제외하려면 one부정 연산자와 함께 반복 패턴을 사용합니다.#

ls (^one/)#/*.png

관련 정보