1-99로 끝나는 모든 파일을 찾고 다른 모든 파일은 제외하는 찾기 명령 문자열을 만들려고했습니다. .

myfile1 myfile99 를 찾고 싶지만 myfile456 가 아니라 myfilebackup

제가 생각하는 정규식은 myfile[1-9]{1,2}하지만 find와 함께 작동하지 않습니다.

find . -regex ".*myfile[0-9]{1,2}" 또는 find . -iname "myfile[0-9]{1,2}"

내가 볼 수있는 것은 작동하지 않는 {1,2} 부분입니다.

(참고로 -name -regex를 같은 의미로 사용할 수 있습니까?)

어떤 도움을 주셔서 감사합니다.

댓글

  • -iname (및 -name)는 globs 를 사용합니다. 이 구문이 없습니다.

답변

해 볼 수 있습니다.

find . -regex ".*myfile[0-9][0-9]?" 

또는

find . \( -name "myfile[0-9][0-9]" -o -name "myfile[0-9]" \) 

댓글

  • 감사합니다. 첫 번째 줄은 worki 나를 위해 ng. -iname으로 시도했지만 '이 구문이 지원되지 않는다고 생각하거나 ' 뭔가 잘못하고 있습니다.

li>

Answer

GNU find가있는 경우 다른 정규 표현식 유형을 사용할 수 있습니다.

find . -regextype sed -regex ".*myfile[0-9]\{1,2\}" 

GNU에 따르면 find 중성 을 사용합니다. Emacs 정규식 구문 기본적으로-Emacs는 \{from,to\} 구문을 지원하지만 최소한 GNU find는 지원하지 않습니다.

이상하게도 참조 설명서에는 sed 정규식 구문에 대한 섹션이 포함되어 있지 않으므로 누가 그 부분을 알고 있는지 알 수 있습니다. 지원됩니다.

댓글

  • sed edposix-basic의 별칭으로 보이므로 POSIX BRE와 호환되어야합니다 (일부 \+와 같은 긴장). '는 GNU sed와 호환되지 않습니다. 예를 들어 [\n]는 POSIX에 필요한 백 슬래시 또는 n POSIX ERE의 경우 -regextype posix-extended (즉 .*myfile[0-9]{1,2})도 참조하세요. 또한 \s 또는 \<
  • -regextype에 대해 전혀 몰랐습니다. -regextype egrep를 사용하면 백 슬래시를 피할 수있는 것 같습니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다