Program Tip

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

programtip 2020. 11. 11. 20:31
반응형

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


특정 확장자를 가진 파일을 찾으려고합니다. 예를 들어 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' \)

-regex옵션 을 사용하는 대신 find질문이 라는 레이블이 지정되어 있으므로 중괄호 확장 메커니즘을 사용할 수 있습니다.

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

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

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


이 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)$'

참고 URL : https://stackoverflow.com/questions/25693638/recursively-find-files-with-a-specific-extension

반응형