내부에 파일 ls
이있는 디렉토리를 시도하고 .png
있습니다 (재귀가 필요하지는 않지만 더 유용 할 것입니다). 하나의 디렉토리 즉,
ls */*.png
잘 작동합니다.
ls (^one)*/*.png
stdout을 리턴하지 않습니다. 어떻게하면 되나요?
나는 장님이고 그것을에 배관하기 espeak
때문에 지금은 표준 음 만들을 수 있습니다.
답변
옵션 1- 그냥 사용 ls
:
확장 bash globbing을 켜면 ( 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 만이 작업을 재귀 적으로 수행합니다.
답변
에서 zsh을 넣어 setopt extended_glob
당신에 ~/.zshrc
. 그런 다음 와일드 카드 패턴 ^one
을 사용하여 라는 디렉토리를 제외 할 수 있습니다 one
.
ls ^one/*.png
하위 디렉토리로 재귀를 원하면 **/
재귀 globbing에 사용하십시오. one
최상위 디렉토리뿐만 아니라 최상위 디렉토리에서 호출 된 디렉토리를 제외하려면 다음을 수행하십시오.
ls ^one/**/*.png
one
서브 디렉토리의 파일이 아닌 이라는 서브 디렉토리에서 파일을 제외 시키려면 다음을 수행하십시오.
ls **/^one/*.png
one
임의의 레벨에서 호출 된 서브 디렉토리 에서 파일을 제외 시키려면 #
부정 과 관련하여 연산자 와 반복 패턴을 사용하십시오 .
ls (^one/)#/*.png