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

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

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

이 디렉토리에는 여러 파일 세트가 포함될 수 있으며 모두 다음 형식을 따릅니다.

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

관련 정보