이름 전역 패턴 또는 정규식으로 파일을 찾습니다. 단, 처음에는 정확히 일치하고 끝에서는 특정 문자만 허용합니다.

이름 전역 패턴 또는 정규식으로 파일을 찾습니다. 단, 처음에는 정확히 일치하고 끝에서는 특정 문자만 허용합니다.

find . -name 'Name*'기본 이름을 공유하지만 파일과 일치 하도록 끝에 크기 정보가 추가된 일부 이미지 파일을 일치시키려고 합니다 . 예를 들면 다음과 같습니다.

Name.jpg
[email protected]
Name-180x101.jpg
[email protected]

그러나 내 전역 패턴도 일치합니다.

NameLonger.jpg
[email protected]
NameLonger-180x101.jpg
[email protected]

두 번째 그룹은 인기가 없습니다.

find첫 번째 그룹을 공격하고 두 번째 그룹을 무시하도록 명령을 어떻게 조정할 수 있나요 ? 전역 패턴을 사용할 수 있습니까, 아니면 정규식이 필요합니까?

참고: 이 경우 크기 정보(-180x101)는 항상 "-", 임의의 숫자, "x", 임의의 숫자 순입니다. 파일에 "@2x"가 포함되어 있으면 항상 끝에 있습니다.

참고: 일반 파일(예: Name.jpg.

미리 감사드립니다.

답변1

를 사용하여 zsh원하는 파일 이름 형식을 지정합니다.

print -rC1 -- **/Name(-<->x<->|)(@<->x|).jpg(DN)
  • print -rC1: print r아, 1 C칼럼 에 대해서요
  • **/: 재귀적 와일드카드
  • (a|b): (x|)ERE 처럼 번갈아가며(x)?
  • <x-y>: 정수 x에서 y까지의 일련의 10진수를 나타내며 <->임의의 숫자의 일련의 숫자를 나타냅니다.
  • D: dotglob: 이와 같이 숨겨진 디렉토리도 볼 수 있습니다 find.
  • N: nullglob: 일치하는 항목이 없으면 불평하지 말고 아무것도 없는 것으로 확장하세요.

GNU find동등(파일 순서가 없으며 ./각 경로에 접두사가 붙음):

LC_ALL=C find . -regextype posix-extended -regex \
  '.*/Name(-[0-9]+x[0-9]+)?(@[0-9]+x)?\.jpg'

(BSD의 경우 대신 find사용 )find -E .find . -regextype posix-extended

표준을 사용하면 find아마도 다음과 같습니다.

find . -name '.*/Name[-@.]*'

필요한 것은 배제뿐이라면 그것으로 충분합니다 NameLonger.

단순 와일드카드 패턴에는 OR +연산자 에 해당하는 패턴이 없습니다 ?. |여러 -nameAND를 ! -name사용하여 AND 및 OR로 동일한 작업을 수행 할 수 있지만(예: 수락 Name-*x*.jpg 하지만 거부, , Name-*[!0-9]*x*[!0-9]*.jpg등) 모든 경우를 처리하려면 이러한 작업이 수백 번 필요하므로 매우 번거로울 수 있습니다.Name-x*Name-*x.jpg

fnmatch()이 함수 ( 에서 사용 ) 의 GNU libc 구현은 정규식 동등성을 가져오는 find -name일부 ksh88 확장 glob 연산자(플래그)를 지원하도록 지시할 수 있습니다 ( , ... 또한 or 에서도 지원됨 ). 그러나 내가 아는 한, 심지어는 GNU 구현에서는 이를 사용하도록 지시할 수 있습니다.FNM_EXTMATCH+(...)?(...)zsh -o kshglobbash -O extglobfind

POSIXly에서는 다음을 통해 일치를 최적화할 수 있습니다 awk.

LC_ALL=C find . -name 'Name*' -exec awk '
  BEGIN {
    for (i = 1; i < ARGC; i++)
      if (ARGV[i] ~ "/Name(-[0-9]+x[0-9]+)?(@[0-9]+x)?\\.jpg$")
        print ARGV[i]
  }' {} +

(일부 파일의 경로가 너무 길어서 명령줄에 맞지 않으면 실패할 수 있다는 점을 명심하세요. 어쨌든 모든 find구현이 그보다 긴 경로를 가진 파일을 찾을 수 있는 것은 아닙니다 PATH_MAX.)

관련 정보