나는 하나를 제외하고 내부에 파일이 ls
있는 디렉토리를 가지려고 합니다 .png
(특히 유용하지만 재귀는 필요하지 않습니다). 디렉토리를 제외합니다.
ls */*.png
잘 작동합니다.
ls (^one)*/*.png
표준 출력을 반환하지 않습니다. 어떻게 구현할 수 있나요?
눈을 멀게 하고 파이프를 연결하여 espeak
지금 들을 수 있는 것은 표준 출력뿐입니다.
답변1
옵션 1- 다음만 사용 ls
:
확장된 bash 와일드카드 열기( shopt -s extglob
), 다음을 수행할 수 있습니다.
ls !(one*)/*.png
옵션 2- 결합 ls
및 grep
:
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