쉘 명령에서. ?? *는 무엇을 의미합니까? .??* 나는 정규 표현식에 익숙 하지만 해석 방법을

다음 명령 것 tar모두 “점”파일 및 폴더 :

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

나는 정규 표현식에 익숙 하지만 해석 방법을 이해하지 못한다 .??*. 나는 나열된 파일을 실행 ls .??*하고 tree .??*보았다. 예를 들어이 정규식에 폴더 내 모든 파일이 포함 .됩니까?



답변

글롭 은 정규 표현식이 아닙니다. 일반적으로, 쉘은 당신이 glob로 인용하지 않은 명령 행에 입력 한 모든 것을 해석하려고 시도합니다. 쉘은 정규 표현식을 전혀 지원할 필요는 없습니다 (실제로는 더 많은 현대적인 것, 예를 들어 구문 의 =~정규식 일치 연산자 bash [[).

.??*글러브입니다. 리터럴 도트로 시작하는 파일 이름과 일치하는 .두 문자 (앞에 반드시 같은 것은 아님) ??, 그 뒤에 정규 표현식 ( [^/]*예 : 0이 아닌 문자)이 일치 /합니다.

쉘 경로 이름 확장 ( “글 로빙”의 전체 이름)에 대한 자세한 내용은 POSIX spec을 참조하십시오 .


답변

.??*와일드 카드 ( 하지 정규 표현식, 그것은 그런 식으로 보이지만) 기간 (시작 파일 이름으로 변환 .이 하나 개의 문자 (다음), ??다음 다른 문자의 개수 (0 개 이상)를), 그리고 ( *).

어쩌면 파일 이름의 와일드 카드에 대한이 페이지 가 도움이 될 것입니다.


답변

다른 답변에 추가하기 위해 ?단일 문자는 단일 문자 파일 이름으로 변환 ??되며 두 문자 만있는 파일 이름과 일치합니다.

[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]#