정규식을 사용하여 macOS 터미널에서 찾기 사용

정규식을 사용하여 macOS 터미널에서 찾기 사용

다양한 이미지 파일 이름의 변형이 포함된 폴더를 검색하려고 합니다.

1_2-300x224.jpg
1_2-600x449.jpg
1_2-600x600.jpg
1_2-768x575.jpg
1_2-802x600.jpg
1_2.jpg

2~4자리 + 'x' + 2~4자리로 끝나는 파일을 찾아서 삭제할 계획입니다. 이 일치 항목을 다음에 만들 수 있습니다.정규식표현식 사용 .*(\d{2,4}x\d{2,4}).jpg(이 표현식은 을 제외한 모든 항목을 강조 표시함 1_2.jpg)

그러나 실행하면 find . -name ".*(\d{2,4}x\d{2,4}).jpg"결과가 반환되지 않습니다.

당황스러워요!

답변1

여기에는 몇 가지 문제가 있습니다. 첫째, John이 언급한 것처럼 -nameglob과 하위 문자열 일치를 수행하므로 를 사용해야 하며 -regex둘째, 정규식 방언이 호환되지 않습니다. 기본적으로 GNU find는 Emacs 정규식을 사용하고 BSD find는 posix-basic 정규식을 사용합니다. 설치 한 경우 find.info여기에서 자세한 내용을 읽을 수 있습니다.

info find.info 'Reference' 'Regular Expressions' 'emacs regular expression'

지원되는 정규식 방언은 여기에서 찾을 수 있습니다:

info find.info 'Reference' 'Regular Expressions'

여기:

* findutils-default regular expression syntax::
* emacs regular expression syntax::
* gnu-awk regular expression syntax::
* grep regular expression syntax::
* posix-awk regular expression syntax::
* awk regular expression syntax::
* posix-basic regular expression syntax::
* posix-egrep regular expression syntax::
* egrep regular expression syntax::
* posix-extended regular expression syntax::

GNU 찾기

posix-extendedGNU find를 사용하면 다음과 같이 표현식이 작동하도록 만들 수 있습니다 .

find . -regextype posix-extended -regex '.*[0-9]{2,4}x[0-9]{2,4}.jpg'

산출:

./1_2-600x600.jpg
./1_2-802x600.jpg
./1_2-600x449.jpg
./1_2-300x224.jpg
./1_2-768x575.jpg

BSD 찾기

BSD 찾기에 액세스할 수 없지만 이것이 작동할 것이라고 생각합니다.

find -E . -regex '.*[0-9]{2,4}x[0-9]{2,4}\.jpg'

관련 정보