특정 확장자를 가진 최신 파일 목록을 반복적으로 가져와서 폴더에 복사하는 방법

특정 확장자를 가진 최신 파일 목록을 반복적으로 가져와서 폴더에 복사하는 방법

확장자를 가진 최신 파일 목록을 재귀적으로 가져오고 .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.jwxnnumericglobsort

그런 다음 다음 파일에 대해 몇 가지 작업을 수행합니다.

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])

파일 이름을 기준으로 숫자순이 아닌 마지막 수정 시간을 기준으로 파일을 정렬하려면 nglob 한정자를 Om.

bashGNU 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숫자만 정렬할 수 있기 때문에 작동하지 않습니다.

관련 정보