쉘 글로브의 "또는"

쉘 글로브의 "또는"

파일 이름에 하위 문자열 "s1r", "s2r", "s3r" 또는 "s19r"이 포함된 파일을 찾고 싶습니다.

곧 도착하겠습니다!

잘못된 시도:

ls *s[123][9?]r*

위의 내용은 하위 문자열이 포함된 파일만 제공합니다.

s19r

하지만

ls *s[1-3]|[19]r*

반품

-bash: [19]r*: 명령을 찾을 수 없습니다.

ls: *s[1-3]: 해당 파일이나 디렉터리가 없습니다.

즉, or | 연산자를 인식하지 못합니다. 이는 파이프에도 사용되기 때문에 의미가 있습니다.

"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 패턴 매칭 매뉴얼자세한 내용은.

관련 정보