답변:
옵션 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 만이 작업을 재귀 적으로 수행합니다.
find
명령이 필요 말을 -path "*/one/*"
나 -path "./one/*"
?
./phone/handset.png
않습니까?
.png
이라는 디렉토리에서 s 를 일치시키는 데 문제가있는 것은 무엇입니까 phone
? 방금 배제하려고한다고 생각 one
했나요?
-not
, 그것은이 (가) 발생한다는 것을 의미 find
라는 디렉토리에있는 파일을 제외 할 phone
.
에서 zsh을 넣어 setopt extended_glob
당신에 ~/.zshrc
. 그런 다음 와일드 카드 패턴 ^one
을 사용하여 라는 디렉토리를 제외 할 수 있습니다 one
.
ls ^one/*.png
하위 디렉토리로 재귀를 원하면 **/
재귀 globbing에 사용하십시오. one
최상위 디렉토리뿐만 아니라 최상위 디렉토리에서 호출 된 디렉토리를 제외하려면 다음을 수행하십시오.
ls ^one/**/*.png
one
서브 디렉토리의 파일이 아닌 이라는 서브 디렉토리에서 파일을 제외 시키려면 다음을 수행하십시오.
ls **/^one/*.png
one
임의의 레벨에서 호출 된 서브 디렉토리 에서 파일을 제외 시키려면 #
부정 과 관련하여 연산자 와 반복 패턴을 사용하십시오 .
ls (^one/)#/*.png
one
(올바른 패턴은^one/*.png
) 유용한 것은 아니지만 모든 것을 인쇄합니다.