.??*는 쉘 명령에서 무엇을 의미합니까?

.??*는 쉘 명령에서 무엇을 의미합니까?

이것다음과 같은tar모든 파일과 폴더에 "점" 을 찍는 명령 :

tar -zcvf dotfiles.tar.gz .??*

나는 익숙하다일반적인 표현, 하지만 어떻게 설명해야 할지 모르겠습니다 .??*. 나열된 파일을 실행 ls .??*하고 보았습니다. 이 정규식 에 example으로 시작하는 폴더의 모든 파일이 tree .??*포함되는 이유는 무엇입니까 ?.

답변1

와일드카드정규 표현식이 아닙니다. 일반적으로 말하면, 쉘은 glob으로 인용되지 않은 명령줄에 입력한 모든 내용을 해석하려고 시도합니다. 쉘은 정규식을 전혀 지원할 필요가 없습니다(비록 더 많은 고급 최신 쉘은 실제로 구문 =~의 정규식 일치 연산자 와 같은 정규식을 지원하지만 bash [[).

이것은 .??*구체입니다. 이는 리터럴 점 으로 시작하고 .그 뒤에 두 개의(반드시 동일하지는 않음) 문자 , ??그 뒤에 동등한 정규식 [^/]*, 즉 가 아닌 0개 이상의 문자가 오는 파일 이름과 일치합니다 /.

쉘 경로 이름 확장("globbing"의 전체 이름)에 대한 자세한 내용은 다음을 참조하세요.POSIX 사양.

답변2

와일드카드 .??*(아니요정규식은 모양과 관계없이 .마침표( )로 시작하고 그 뒤에 두 개의 단일 문자( ??)와 임의 개수(0개 이상) *의 다른 문자( )가 오는 파일 이름으로 변환됩니다.

어쩌면 이 페이지에서파일 이름의 와일드카드 문자도움이 될거야.

답변3

다른 답변에 추가하려면 Single은 ?단일 문자 파일 이름으로 변환되고 ??두 문자만 포함된 파일 이름과 일치합니다.

[root@mercy testdir_2]# ls
ion  it  r
[root@mercy  testdir_2]# ls ?
r
[root@mercy  testdir_2]# ls ??
it
[root@mercy 1 testdir_2]# ls ???
ion
[root@mercy  testdir_2]#

관련 정보