[linux] 특정 확장자를 가진 파일을 재귀 적으로 찾기

특정 확장자를 가진 파일을 찾으려고합니다. 예를 들어 Robert라는 이름의 모든 .pdf 및 .jpg 파일을 찾고 싶습니다.

이 명령을 할 수 있다는 걸 알아

$ find . -name '*.h' -o -name '*.cpp'

하지만 확장자 외에 파일 자체의 이름을 지정해야합니다. 파일 이름을 반복해서 쓰는 것을 피할 수있는 방법이 있는지 확인하고 싶습니다. 감사합니다!



답변

내 선호 :

find . -name '*.jpg' -o -name '*.png' -print | grep Robert


답변

사용 find-regex인수를 :

find . -regex '.*/Robert\.\(h\|cpp\)$'

또는 다음을 사용하십시오 -name.

find . -name 'Robert.*' -a \( -name '*.cpp' -o -name '*.h' \)


답변

find -name "*Robert*" \( -name "*.pdf" -o -name "*.jpg" \)

-orepreents OR조건을하고 괄호 안에 원하는대로 당신은 많은대로 추가 할 수 있습니다. 따라서 이름에 “Robert”라는 단어가 포함되어 있고 이름이 “pdf”또는 “jpg”로 끝나는 모든 파일을 찾습니다.


답변

사용의 대안으로 -regex 옵션find 질문에 레이블이 지정되어 있으므로, 가새 확장 메커니즘을 사용할 수 있습니다.

eval find . -false "-o -name Robert".{jpg,pdf}


답변

이 Q / A는 정규식으로 find를 사용 하는 방법을 보여줍니다. find 명령으로 regex를 사용하는 방법?

패턴은 다음과 같을 수 있습니다.

'^Robert\\.\\(h|cgg\\)$'


답변

스크립트로 다음을 사용할 수 있습니다.

find "${2:-.}" -iregex ".*${1:-Robert}\.\(h\|cpp\)$" -print
  • 다른 이름으로 저장 findcc
  • chmod 755 findcc

그리고 그것을 사용하십시오

findcc [name] [[search_direcory]]

예 :

findcc                 # default name 'Robert' and directory .
findcc Joe             # default directory '.'
findcc Joe /somewhere  # no defaults

사용할 수 없습니다

findcc /some/where    #eg without the name...

또한 대안으로 사용할 수 있습니다.

find "$1" -print | grep "$@"

findcc directory grep_options

처럼

findcc . -P '/Robert\.(h|cpp)$'


답변

bash globbing 사용 ( find필수가 아닌 경우 )

ls Robert.{pdf,jpg}