2013-03-18 1 views
1

bash 스크립트에서 경로가 "double extension" 인 서브 디렉토리를 포함하지 않는 파일을 찾고 싶습니다.Bash 확장 globbing 패턴을 사용하여 특정 문자가 포함되지 않은 경로를 일치시킬 수 있습니까?

/my/home/subdirectory.1/path/to/my/file 
/my/home/subdirectory.1.2/path/to/my/file 

이것은 간단한 예는 다음과 같습니다 : 예를 들어, 내가 path/to/my/file에 대한 /my/home의 하위 디렉토리에서 찾고과가 존재 다음 경우 스크립트는 첫 번째 찾을 것 12 어떤 캐릭터 라인입니다; 핵심은 파일 확장자 (예 : 마침표로 구분)와 같은 것입니다.

나는 ls

$ ls /my/home/subdirectory.*/path/to/my/file 

를 사용할 수 있지만이 모두 반환 - 나는 .[^.]*.*을 대체하고 싶습니다하지만 정규식이고 대체 (globbing)는 정규식을 사용하지 않습니다. 나는 글 로빙 확장 시도했다 그러나 나는 (I 확장이 글 로빙에 익숙하지 않은 오전 인정 나는 행복 해요 )를 동작하지 않습니다 : 나는과 같이이 작업을 수행 할 find을 사용할 수 있습니다 알고

$ shopt -s extglob 
$ ls /my/home/subdirectory.!(.*)/path/to/my/file 

을 :

$ find /my/home/subdirectory* -regex "/my/home/subdirectory.[^.]*/path/to/my/file" 

그러나 glob가 더 빠를 것으로 기대합니다. 그러나 이것에 대해 읽었을 때, 이것이 Bash의 globbing 능력을 넘어서는 것이라고 생각합니다. 그러나 나는 토론할만한 가치있는 좋은 질문이라고 생각했다.

답변

1

나는 당신이 원하는 것은 확장에 하나 이상의 비 . 문자와 일치하는 것이다

ls /my/home/direcectory.+([!.])/path/to/my/file 

생각합니다. 그들이 이해하기 쉬운 becasuse

+0

느낌표 대신에 캐럿 ('^')을 사용할 수 있습니다. –

2

시도 :

ls /my/home/subdirectory!(.*.*)/path/to/my/file 

또는

ls /my/home/subdirectory.!(*.*)/path/to/my/file 

당신이 확장없이 디렉토리를할지 여부에 따라 일치 여부를해야합니다.

+1

나는 그러나 @ chepner의 대답도/내/file'에 /은'/ 내/홈/디렉토리./경로를 무시하고, 따라서 조금 엄격, 답변을 좋아합니다. – starfry