확장자를 가진 최신 파일 목록을 재귀적으로 가져오고 .jmx
다른 프로세스에서 파일 이름을 사용하는 방법은 무엇입니까?
여러 폴더로 구성된 JMX 파일 목록이 있고 각 하위 폴더에서 최신 파일을 선택하고 다른 프로세스에서 JMX 파일을 사용하고 싶습니다. (JMeter 테스트 실행)
이상적으로 최신 파일은 파일 이름에 사용 가능한 버전 번호가 더 높은 파일이어야 합니다.
두 하위 폴더의 예시 목록
/test_plans/accounts/filter/TestPlan-API-Accounts-Filter-1.2.jmx
/test_plans/accounts/filter/TestPlan-API-Accounts-Filter-1.1.jmx
/test_plans/accounts/filter/TestPlan-API-Accounts-Filter-1.0.jmx
/test_plans/account-activation/TestPlan-Account-Activation-1.2.jmx
/test_plans/account-activation/TestPlan-Account-Activation-1.1.jmx
/test_plans/account-activation/TestPlan-Account-Activation-1.1 .jmx
/test_plans/account-activation/TestPlan-Account-Activation-1.0 .jmx
골라야 TestPlan-API-Accounts-Filter-1.2.jmx
하고TestPlan-Account-Activation-1.2.jmx
재귀적으로 파일 목록을 가져올 수 있습니다.find ./test_plans -type f | sort -nr
답변1
이를 통해 zsh
다음을 수행할 수 있습니다.
typeset -A latest
for jmx (**/*.jmx(nN)) latest[$jmx:h]=$jmx
값이 이름이 숫자로 마지막에 정렬된 파일인 $latest
연관 배열을 구축합니다 ( 이 glob을 활성화하는 glob 한정자 덕분에 ).latest[some/dir]=some/dir/file-99.jwx
n
numericglobsort
그런 다음 다음 파일에 대해 몇 가지 작업을 수행합니다.
ls -ld -- $latest
또는 다음을 사용하여 반복합니다.
for file ($latest) {
...
}
또는 원하는 경우 Bourne 스타일 구문을 사용할 수 있습니다.
for file in $latest; do
...
done
연관 배열의 키(디렉토리)를 반복하려면 다음을 수행하십시오.
for dir (${(k)latest}) ...
또는 키와 값 모두:
for dir file (${(kv)latest}) ...
dir=$file:h
(항상 파일에서 상위 디렉터리 가져오기 또는 파일에서 디렉터리 가져오기 를 사용할 수는 있지만 $latest[$dir]
)
파일 이름을 기준으로 숫자순이 아닌 마지막 수정 시간을 기준으로 파일을 정렬하려면 n
glob 한정자를 Om
.
bash
GNU 4.4+ 및 GNU와 find
비슷한 작업을 수행합니다 sort
.
typeset -A latest
readarray -td '' files < <(
LC_ALL=C find . -name '.?*' -prune -o -name '*.jmx' -print0 |
sort -zV)
for jmx in "${files[@]}"; do
latest[${jmx%/*}]=$jmx
done
그런 다음:
ls -ld -- "${latest[@]}"
for file in "${latest[@]}"; do
...
done
for dir in "${!latest[@]}"; do
file=${latest[$dir]}
...
done
위에서 버전 정렬은 zsh의 glob qualifier와 유사한 방식으로 sort -V
파일 목록을 정렬합니다 .n
sort -n
숫자만 정렬할 수 있기 때문에 작동하지 않습니다.