쉘 글로브의 "또는"

쉘 글로브의 "또는"

파일 이름에 하위 문자열 "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 매뉴얼상세 사항은.

관련 정보