파일 a1, a2, a3, b1, b2, b3이있는 디렉토리가 있다고 가정 해 봅시다. 로 시작 a
하지만 포함하지 않는 파일 만 일치시키고 싶습니다 3
. 나는 그것을 시도하고 ls -I "*3" *a*
싶지만 a1 a2 a3
, 나는 그것이 일치하지 않기를 원하지만 반환합니다 a3
. 이 가능 ls
합니까?
답변
다만:
shopt -s extglob
ls a!(*3*)
shopt -s extglob
확장 글러브를 활성화합니다.a
시작과 일치a
!()
내부의 일치를 무효화합니다()
…*3*
이는3
아무것도 앞이나 뒤에.
$ touch 1 2 3 a1 a2 a3 b1 b2 b3 aa1 aa2 aa3 a2a a3a
$ ls a!(*3*)
a1 a2 a2a aa1 aa2
답변
기존 답변은 globs로 이것을 수행하는 가장 좋은 방법을 잘 설명합니다. 대부분의 경우 find
스크립팅 또는 추가 처리를 수행하려는 경우 더 나은 옵션 이므로이를 포함하겠습니다 .
$ find . -maxdepth 1 -name 'a*' -not -name '*3*'
./a1
./a2
xargs
쉬운 행동 을 위해 답을 제공하거나 while read
더 복잡한 것들을 위해 반복문을 제공 할 수 있습니다.
답변
쉬운 방법은
- 일치하는 모든 파일을 나열
a*
- 그런 다음
3
UNIX 명령은
ls -1 a* | grep -v 3
ls -1
한 줄에 하나의 파일을 표시합니다.
grep
일반적으로 패턴과 일치하는 -v
행을 찾지 만이 동작으로 반전됩니다. 즉, grep은 해당 패턴과 일치하지 않는 행을 찾습니다.
답변
로 glob 연산자를zsh
사용하십시오 .~
setopt extendedglob
print -rl -- a*~*3*
으로 gnu
ls
당신이 사용할 수있는 --ignore
옵션 :
ls -I '[^a]*' -I '*3*'
첫 번째는 시작하지 않는 모든 파일 이름을 a
무시하고 두 번째는 포함 된 파일 이름을 무시합니다3