
파일 이름에 하위 문자열 "s1r", "s2r", "s3r" 또는 "s19r"이 포함된 파일을 찾고 싶습니다.
거의 다 왔어요!
잘못된 시도:
ls *s[123][9?]r*
위의 내용은 하위 문자열을 포함한 파일만 제공합니다.
s19r
하는 동안
ls *s[1-3]|[19]r*
보고
-bash: [19]r*: 명령을 찾을 수 없습니다.
ls: *s[1-3]: 해당 파일이나 디렉터리가 없습니다.
즉, 또는 | 연산자 - 파이프에도 사용되므로 의미가 있습니다.
"s1r", "s2r", "s3r" 또는 "s19r"이 포함된 파일을 어떻게 찾을 수 있나요?
답변1
사용 ls *s1r* *s2r* *s3r* *s19r*
.
존재하지 않는 파일에 관심이 있는 경우 nullglob 옵션을 설정할 수 있습니다.
nullglob
If set, bash allows patterns which match no files (see
Pathname Expansion above) to expand to a null string,
rather than themselves.
쉘이 bash가 아닌 경우 아마도 비슷한 방법이 있을 것입니다. 맨 페이지를 살펴보십시오.
답변2
다음을 시도해 볼 수도 있습니다.
ls *s?([123])r* *s19r*
예를 들어
다음 파일이 포함된 디렉터리가 있습니다.
% ls | column
s10r s12r s14r s16r s18r s1r s2r s4r s6r s8r
s11r s13r s15r s17r s19r s23r s3r s5r s7r s9r
위에서 언급한 ls를 사용하여:
% ls *s?([123])r* *s19r*
s19r s1r s2r s3r
참조패턴 일치에 대한 bash 매뉴얼상세 사항은.