파일 이름 끝이 문자열과 일치하는 디렉터리에서 마지막 파일을 찾습니다.

파일 이름 끝이 문자열과 일치하는 디렉터리에서 마지막 파일을 찾습니다.

작업 속도를 높이기 위해 파일을 생성/복사하는 스크립트를 작성 중입니다. 이 경우 디렉터리에서 특정 문자열로 끝나는 파일을 검색해야 하며, 파일이 하나 이상 발견되면 시퀀스의 마지막 파일을 대상으로 복사해야 합니다. (아무 것도 발견되지 않으면 스크립트는 다른 디렉터리에서 새 파일을 복사합니다.)

이 디렉토리에는 모두 해당 형식을 따르는 여러 파일 세트가 포함될 수 있습니다.

YYYYMMDD_##_user_filename.json

따라서 예제 폴더에는 다음이 포함될 수 있습니다.

20161021_01_test_parameters.json
20161021_01_test_stack.json
20161021_02_test_parameters.json
20161021_02_test_stack.json
20161022_03_test_parameters.json
20161025_04_test_parameters.json
20161025_04_test_stack.json

parameters.json이 경우에는 다음으로 끝나는 모든 파일을 읽은 다음 버전 번호(01, 02 등)를 기준으로 정렬하여 시퀀스의 마지막 파일을 찾는 스크립트가 필요합니다 . 그런 다음 이 파일을 다음 버전 번호를 사용하여 동일한 폴더에 복사해야 합니다. 이 목적을 위해 날짜는 관련이 없으며 중복된 버전 번호가 없을 것이라고 가정할 수 있습니다.

나는 사용하고 있었지만 if [ -e $1/*"parameters.json" ]; then cp $1/*"parameters.json" "$FILENAME"_parameters.json( $1이 파일이 이동되는 디렉토리는 어디에 있습니까? 스크립트는 작업을 수행할 디렉토리 외부에 있고 $FILENAME위치, 날짜, 버전 번호 등을 계산하는 변수이기 때문에 중요합니다) 물론 이것은 가장 최근의 것을 찾는 데 아무런 영향을 미치지 않습니다.

답변1

정렬하려는 숫자는 항상 밑줄로 구분된 두 번째 필드로 나타나므로 다음과 같은 것을 사용할 수 있습니다.

find path/to/dir/ -maxdepth 1 -name '*parameters.json' | sort -t_ -nk2,2 | tail -n1

개행 문자가 포함된 파일 이름의 가능성을 처리해야 하고 핵심 유틸리티가 이를 지원하는 경우 전체 명령을 null로 구분할 수 있습니다.

find path/to/dir/ -maxdepth 1 -name '*parameters.json' -print0 | sort -zt_ -nk2,2 | tail -zn1

관련 정보