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


81

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

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

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

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


4
이 명령 또는 그 아래의 명령을 복사하는 사람 iname대소 문자를 구분하지 않는 대신 사용해야 합니다 .
Addison

좋은 지적이야, Addison (따라서 +1). 그러나 OP는 대문자 'R'과 함께 'Robert'라는 파일을 원하는 것 같습니다. 게시물을 해석 할 때 'robert'가 포함 된 파일이 출력되지 않아야 함을 의미합니다. ' R의 obert` 서면 무슨이다. 그러나 누군가가 'Robert'또는 'robert'를 찾고자하는 상황이 있습니다. 아마도 OP는이 상황에있을 것입니다. 사용 여부 iname또는 name찾고자하는 것에 따라 다릅니다. 나는 사건이 필수적인 상황에 있었다.
bballdave025

답변:


101

내 선호 :

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

2
잘 작동하지만, 약간의 단점은이 일에서 당신을 배제한다는 것이다find -exec ...
마크 Setchell

특정 경로의 모든 폴더에서 모든 xxx-deployment.yml 파일을 찾으려면 어떻게합니까?
Naim Salameh

이것은 더 긴 경로 를 가지고 jpg있거나 png더 긴 경로의 일부로 잘 작동하지 않습니다 .
AutonomousApps

18

사용 find-regex인수를 :

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

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

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

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

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


3

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

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

"경로가 표현식 앞에 있어야 함"보고서를 찾으십시오. 문제가 무엇입니까? 나는 일반적으로 그것을 해결하기 위해 따옴표를 추가하지만이 표현에서는 작동하지 않습니다. 감사!
netawater 2015

위의 명령에서 잊었 eval거나 잊었 거나, 더 복잡한 것에 대한 별칭이거나, Linux 버전 에서 주식 GNU 를 사용하지 않는 것 같습니다 . .findfind
jxh

답장 해 주셔서 감사합니다. 다음과 같은 스크립트를 사용했습니다. FILEEXTEIONS = cs, [ch] eval find. -false "-o -name *". {$ FILEEXTEIONS}, 해당 오류를보고합니다.
netawater 2015

내가 아는 한, 변수 확장은 중괄호 확장 중괄호 내부에서 발생하지 않습니다.
jxh

1
나는 안드로이드 쉘에서이 기술을 사용하고 싶어하지만은 find지원하지 않습니다 -false. 나는 두 개의 상호 배타적 인 조건을 제공하여이 문제를 해결했습니다 -inum 1 -inum 2.
starfry


1

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

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

1

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

ls Robert.{pdf,jpg} 

0

ls : (숨겨진 폴더를 포함하는 경우 -al)

ftype="jpg"
ls -1R *.${ftype}  2> /dev/null
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.