여러 파일 확장자에 '찾기'사용


16

JAVA 파일의 텍스트 줄 수를 계산하기 위해 다음 명령을 사용하고 있습니다.

find . -name '*.java' | xargs wc -l

find둘 이상의 파일 확장자와 일치 하도록 명령 매개 변수를 수정하려면 어떻게 해야합니까? 예를 들어, CPP, C 및 H 파일에 대해 위의 작업을 사용하고 싶습니다.


이 질문은 실제로 find명령 에 관한 것 입니다. 왜냐하면 일치하는 파일을 검색하는 곳이기 때문입니다.
iglvzx

1
또한 find -print0 | xargs -0구문을 사용하거나 더 좋고 간단 find . -name '*.cpp' -o -name '*.c' -o -name '*.h' -exec wc -l {} +합니다. 이렇게하면 파일 이름 문제 (공백, 줄 바꿈 등)를 피할 수 있으며 (매우) 좋은 사용자 정의입니다.
Daniel Andersson

답변:


16

-oOR에 옵션을 사용하십시오 . 예를 들어,이 목록 것 .cpp, .c.h파일 :

find . -name \*.cpp -o -name \*.c -o -name \*.h

*코드로 포맷 된 경우 더 이상 필요가 탈출한다. 완전히 간과했습니다. :)
iglvzx

그렇습니다. 두 사람이 세 번의 수정 작업을했지만 가져 왔습니다.
JOTN April

2
이것은 OSX에서 나에게 효과가 없었습니다 (성-* .ext 만 일치). 아래 @smokinguns에서 제안한 괄호를 사용해야했습니다.
길르앗

2

-o 옵션을 사용해야합니다. 예를 들어 아래 명령문은 폴더에서 모든 png, jpg 및 gif 파일을 찾습니다.

find . \( -iname \*.png -o -iname \*.jpg -o -iname \*.gif \)

대소 문자를 구분하지 않도록 -iname 옵션을 사용합니다.


1
find의 모든 버전에서 iname을 사용할 수있는 것은 아닙니다.
JOTN


1

모든 대답은 다소 동일하지만 여러 이름과 부울 연산자를 사용하여 읽을 수는 없습니다.

나는 이것이 더 우아한 해결책이라고 생각합니다.

$ find . -type f | grep -E "\.java$|\.cpp$|\.c$"

이걸 해보자

  • find . 현재 경로에서 모든 파일을 재귀 적으로 찾습니다 (필요한 경우 다른 경로로 변경)
  • -type f검색을 파일로만 좁 힙니다 (속도가 너무 크지는 않지만 여전히 ...)
  • | grep -E내가 얻을이 사용 GREP 인식 하거나 ( |FreeBSD를 사용하는 맥 OS X에서) 연산자 그렙을 , GNU의 GREP은 필요하지 않습니다 (당신의 체크인 man파일).
  • "\.java$|\.cpp$|\.c$"파일을 포함 정규 표현식 이름 끝 으로 .java, .cpp.c(추가 것들을 당신이 필요)

그런 다음 추가 처리를 위해 결과 목록을 파이프 할 수 있습니다. 예 :

$ find . -type f | grep -E "\.java$|\.cpp$|\.c$" | xargs sed -i '' $'/s/\r$//'

이 예는 CRLFOS X / Linux에 대한 DOS / Windows 줄 끝을 제거합니다 LF(이것은 OS X sed구문 이기도 합니다. 버전 별 확인).


25 가지 확장명 일치 매개 변수를 사용하여 모든 비디오 파일 형식을 찾고 싶었습니다. 이것은 나를 위해 일한 유일한 접근법이었습니다. (우분투 14.04 LTS)
Geek

0

사용하다

find path/to/dir -name "*.ext1" -o -name "*.ext2"

설명

  1. 첫 번째 매개 변수는 검색하려는 디렉토리입니다.
  2. 기본적으로 find재귀가 수행됩니다.
  3. -o약자입니다 -or. 따라서 위는이 와일드 카드 또는이 와일드 카드를 검색 함을 의미합니다. 패턴이 하나만 있으면 필요 없습니다 -o.
  4. 와일드 카드 패턴 주위에 따옴표가 필요합니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.