![정규식을 사용하여 폴더의 실제 경로를 찾는 방법](https://linux55.com/image/148953/%EC%A0%95%EA%B7%9C%EC%8B%9D%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%ED%8F%B4%EB%8D%94%EC%9D%98%20%EC%8B%A4%EC%A0%9C%20%EA%B2%BD%EB%A1%9C%EB%A5%BC%20%EC%B0%BE%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
presto는 분산 SQL 쿼리 엔진입니다.
presto를 설치하면 아래와 같은 메인 폴더가 생성되어야 합니다.
/application/DB/presto/presto-server-0.216
그래서 우리는 말할 수 있습니다
집에 돌아올 때의 스릴을 포착하기 위해 우리는 다음과 같이 할 수 있습니다.내 bash 스크립트의 일부입니다)
PRESTO_HOME=` find /application/DB/presto/ -maxdepth 1 | grep presto-server `
echo $PRESTO_HOME
/application/DB/presto//presto-server-0.216
하지만...일부 사용자는 아래 폴더의 이름을 바꿀 수 있기 때문에/응용 프로그램/DB/presto/새 버전을 설치하려면
그럼 안으로/application/DB/presto, 다음 폴더를 얻을 수 있습니다.
/application/DB/presto/presto-server-HOLD_0.211
/application/DB/presto/_presto-server-0.212
/application/DB/presto/backup_presto-server-0.216.new
/application/DB/presto/presto-server-0.210.old
/application/DB/presto/presto-server-0.212.orig
그래서 이것에 대해
실제 경로를 찾으려면 올바른 구문은 무엇입니까?
/application/DB/presto/presto-server-0.216
노트:
presto 폴더 구조는 항상
presto-server-[부동 소수점 숫자 또는 정수]
유효한 예:
/application/DB/presto/presto-server-0.736
/application/DB/presto/presto-server-0.936
/application/DB/presto/presto-server-1
/application/DB/presto/presto-server-1.9
/application/DB/presto/presto-server-12
잘못된 예:
/application/DB/presto/presto-server-0.736-43.previos
/application/DB/presto/presto-server-0.936_old
/application/DB/presto/orig_presto-server-1
/application/DB/presto/presto-server-1.9.bck
/application/DB/presto/presto-server-PREVIOS
/application/DB/presto/presto-server-
/application/DB/presto/presto-server-0.936_old
/application/DB/presto/orig_presto-server-1.other
/application/DB/presto/presto_server-1.9.bck
/application/DB/presto/OLD_presto-server-12-83
답변1
사용 중인 셸에 따라 와일드카드를 통해 이 작업을 수행할 수 있습니다.
세게 때리다
#! /bin/bash -
shopt -s nullglob extglob
dirs=(/application/DB/presto/presto-server-+([[:digit:]])*(.+([[:digit:]])))
printf '%s\n' "Found ${#dirs[@]} matching directories:" "${dirs[@]}"
다루기 힘든
#! /bin/zsh -
set -o extendedglob
dirs=(/application/DB/presto/presto-server-<->(.<->)#(N))
printf '%s\n' "Found $#dirs matching directories:" $dirs
크쉬 93
#! /bin/ksh93 -
dirs=(~(N)/application/DB/presto/presto-server-+([[:digit:]])*(.+([[:digit:]])))
printf '%s\n' "Found ${#dirs[@]} matching directories:" "${dirs[@]}"
모든 숫자에는 presto-server-
1개 이상의 숫자 시퀀스가 있고 그 뒤에 0개 이상의 숫자 시퀀스가 있습니다 .<digits>
.
답변2
GNU find 로 테스트하면 -regex
다음을 사용할 수 있습니다.
find /application/DB/presto/ -regex '/application/DB/presto/presto-server-\([0-9]*\.\)?[0-9]+'
...선행 경로와 숫자 부분이 필요합니다.
- 선택사항: 선행 숫자 및 마침표
- 하나 이상의 숫자
이는 모든 "유효한" 예제에만 일치하며 "잘못된" 예제에는 일치하지 않습니다.
선행 마침표 앞에 숫자를 원할 경우 다음과 같이 차이를 변경 [0-9]*
합니다 [0-9]+
.
/application/DB/presto/presto-server-0.936
그리고
/application/DB/presto/presto-server-.936