2012-01-16 6 views
1

주어진 루트 내에서 파일 이름에 임의의 확장자가 포함 된 파일을 찾고 싶습니다. 나는이 시도 그 정보를 바탕으로 How to delete all files with certain suffix before file extensionfind 명령으로 특정 파일 확장자 찾기

: 이 게시물을 본

find . -iregex ".*\.\(wav\|aif\|wave\|aiff\)" 

이것은 해야 작업처럼 보이지만, 나는 어떤 결과가 터미널 창에 출력되지 않습니다 .

누구든지 조언을 제공 할 수 있습니까? 나는 10.7

감사합니다, JML

답변

5

:

find . -regex ".*\.\(wav\|aif\|wave\|aiff\)" 

당신은 또는, |에 탈출, \, 문자 누락했다, 나는 실제로 당신이 무엇을 제안하려고 apologies- 사업자

+0

. 내 질문을 수정했습니다. – jml

+0

regex가 아닌'find' 명령으로 출력물을 콘솔에 출력합니까? regex'ing 책임을 다른 유틸리티에 전달하기 위해 다음과 같이 시도 할 수 있습니다 : 'find. | grep -e ". * \. \ (wav \ | aif \)"' – ajshower

+0

그게 완벽합니다. 덕분에 ... 어떻게 유틸리티를 삭제할 수 있습니까? – jml

2

emacs 스타일의 정규식인가요 OSX에있어?

그렇지 않은 경우 -regextype을 사용해보세요. (구식) 리눅스에 find 사람이 페이지에서 :

  • -regextype type

    명령 행에 이상이 발생 -regex-iregex 시험에 의해 이해되는 정규 표현식 구문을 변경합니다. 현재 구현되는 유형은 emacs (기본값), posix-awk, posix-basic, posix-egrepposix-extended입니다. find에 대한

맥 OS X에

, 매뉴얼 페이지는 말한다 : -regex처럼

-iregex pattern

하지만 경기는 대소 문자를 구분하지 않습니다. 파일의 전체 경로가 정규 표현식을 사용하여 패턴과 일치하는 경우

-regex pattern

사실. './foo/xyzzy'파일과 일치 시키려면 정규 표현식 '.*/[xyz]*'또는 '.*/foo/.*'을 사용할 수 있지만 'xyzzy'또는 '/foo/'은 사용할 수 없습니다.

find pdf -iregex ".*/.*.pdf" 

그들 전체 내 폴더에 PDF 파일의 전체 많이 발견하지만, 이러한 변종의 아무도 아무것도 찾을 수 없습니다 :

일부 실험은 보여줍니다

find pdf -iregex ".*/.*\.(pdf|doc|docx)" 
find pdf -iregex ".*/.*\.\(pdf|doc|docx\)" 
find pdf -iregex ".*/.*.(pdf|doc|docx)" 
find pdf -iregex ".*/.*.\(pdf|doc|docx\)" 

따라서, 하나 MacOS X (BSD) find에서 지원하는 정규식이 인식 된 문자 사이에 괄호와 파이프를 포함하지 않는다고 가정해야합니다. '안타깝게도 : man 7 re_format은 그럴 수도 있음을 암시하지만 그렇지 않습니다. -regextype 옵션은 MacOS X (BSD)에서 지원되지 않습니다.

그래서, 그것은. GNU find 설치 또는 N 다른 파일 확장자에 대한 N 별도의 검색을 수행하거나, 일반적으로 파일에 대한 하나 개의 검색을하고 관심있는 파일을 잡으려고 egrep '\.(aff|wave?|aiff)$'를 사용하여 간단한 것이 있습니다 오히려 파일 이름에 개행 문자를 사용하지 않는다고 가정합니다 (공백 문자는 괜찮지 만 개행 문자는 없습니다). 당신이 찾고있는

관련 문제