특정 파일 확장자를 가진 UNIX 찾기 명령

특정 파일 확장자를 가진 UNIX 찾기 명령

prac_데스크탑의 디렉토리 및 하위 디렉토리에서 파일 이름이 로 시작하고 그 뒤에 두 자리 숫자가 오며 .c또는로 끝나는 모든 파일을 찾으려고 합니다..o

find ./Desktop -type f -name "prac_[0-9][0-9]*" \( -name "*.c" -o -name "*.o" \)

내가 겪고 있는 문제는 위의 명령이 파일 prac_99BLAHBLAH.o형식을 prac_99.c.

답변1

파일 이름에 사용되는 와일드카드 패턴은 모든 문자열과 일치할 수 있으므로 패턴 중 하나와 일치하는 이름은 or 입니다 *.prac_99BLAHBLAH.oprac_[0-9][0-9]**.c*.o

대신에

find ./Desktop -type f -name 'prac_[0-9][0-9].[co]'

파일 이름 와일드카드 패턴은 [co]단일 문자 c또는 와 일치 o하므로 와 함께 사용되는 패턴 끝에 배치하면 -name이름 끝에 두 문자 중 하나가 있는 파일 이름을 찾을 수 있습니다.

답변2

숫자와 파일 확장자 사이의 문자를 제한하지 마십시오. 모두 정규식일 수 있습니다.

find ./Desktop -type f -regex ".*/prac_[0-9][0-9][.][co]"
  • 시작은 파일 이름뿐만 아니라 파일 경로와도 일치하기 .*/때문입니다 .-regex
  • 이는 [.]마침표와 일치하는 단일 문자 집합입니다. 일반 문자는 어떤 문자와도 일치할 수 있기 때문에 사용됩니다 .. 이스케이프 처리 \.도 작동하지만 프로그래밍 언어에 따라 구문이 다르기 때문에 이 스타일을 피하는 경향이 있습니다(예: 와 같은 추가 이스케이프 문자를 사용하거나 \\.와 같은 원시 문자열에 사용 r"\.").

관련 정보