
다양한 이미지 파일 이름의 변형이 포함된 폴더를 검색하려고 합니다.
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이 언급한 것처럼 -name
glob과 하위 문자열 일치를 수행하므로 를 사용해야 하며 -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-extended
GNU 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'