여러 확장자로 필터링 된 파일 찾기


52

올바른 구문은 무엇입니까?

find . -type f -name \*.\(shtml\|css\)

이것은 효과가 있지만 우아하지 않습니다.

find . -type f -name \*.shtml > f.txt && find . -type f -name \*.css >> f.txt

키 스트로크를 줄이면서 동일하게하는 방법은 무엇입니까?

답변:


75

당신은 논리 연산자와 함께 다른 검색 식을 결합 할 수 있습니다 -or또는 -and귀하의 경우는 다음과 같이 쓸 수 있도록,

find . -type f \( -name "*.shtml" -or -name "*.css" \)

또한 따옴표를 사용할 때 특수 쉘 문자를 이스케이프 할 필요가 없음을 보여줍니다.

편집하다

Chris가 제안한 것처럼 괄호 안에 -or묵시적 이름 과 암시 적 -and사이에 우선 순위가 낮기 때문에 .-type-name


"* .css"라는 디렉토리도 인쇄됩니다.
Teddy

흠, 업데이트 된 버전의 괄호가 약간 잘못되었습니다. 개별 괄호는 찾기 위해 별도의 매개 변수로 끝나야 하므로 그 주위에 공백이 필요합니다 (` " .css")`단일 문자열 값; (예 :` ' .css)'- ). Second, the parentheses need to go around whole ‘primaries’ (the open parenthesis needs to be before name`과 동일하지만 'operand'사이가 아닙니다.)
Chris Johnsen

15

첫 번째 버전을 수행하는 방법은 다음과 같습니다.

find -type f -regex ".*/.*\.\(shtml\|css\)"

12

파일 만 포함하려면 괄호를 사용해야합니다.

find . -type f \( -name "*.shtml" -o -name "*.css" \) -print

보너스 : POSIX 호환 구문입니다.


4

나는 종종 더 복잡한 필터를 위해 egrep, 더 긴 파이프 또는 perl을 사용하여 스스로를 찾는다.

find . -type f | egrep '\.(shtml|css)$'
find . -type f | perl -lne '/\.shtml|\.css|page\d+\.html$/ and print'

다소 비효율적이지만 일반적으로 문제가되지는 않으며보다 복잡한 작업의 경우 일반적으로 구성 및 수정이 더 쉽습니다.

표준 파일명은 이상한 파일 이름을 가진 파일 (예 : 줄 바꿈 포함)에 이것을 사용하지 않는 것에 적용됩니다.


깨끗하고 모듈 식 솔루션 인 경우 +1 인 경우 일반적으로 검색 결과에서 생성 된 파일을 처리하는 동안 성능 병목 현상이 발생합니다.
Cristik
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.