Google에서 이 내용을 검색했지만 용어가 너무 일반적이고 오탐지가 너무 많아서 여기에 질문하겠습니다. 간단한 대답이 있을 것이라고 확신하지만 저는 보통 *nix에서 스크립트를 작성하지 않습니다.
테스트 환경을 위한 데이터베이스 새로 고침 스크립트를 작성하려고 합니다. 예를 들어 백업은 smbfs 공유에서 마운트되지만 /data/backups/prod
하위 폴더는 약간 까다롭습니다. myproddbserver/yyyymmdd
아래에 파일이 잔뜩 있는 것 같습니다 .
restore
최근 디렉터리에서 yyyymmdd
알려진 이름을 가진 파일을 수집하는 명령을 실행하고 싶습니다 . 예를 들어 다음과 같은 경우가 있습니다.
myproddbserver/20130630/foo.bak
myproddbserver/20130630/bar.bak
myproddbserver/20130731/foo.bak
myproddbserver/20130731/bar.bak
myproddbserver/20130731/foo.bak
및 을(를) 복원하고 싶습니다 myproddbserver/20130731/bar.bak
.
이러한 경로를 안정적으로 얻으려면 어떻게 해야 합니까?
답변1
yyyymmdd
형식을 사용하고 있으므로 숫자 정렬이 제대로 작동합니다. 가장 빠른 방법은 sort
다음 명령을 사용하는 것입니다.
newest_dir=$(printf '%s\n' myproddbserver/* | sort -rn | head -n1)
순수 bash에서도 이 작업을 수행할 수 있습니다.
newest=0
for d in myproddbserver/*; do
(( d > newest )) && newest=$d
done
newest_files=("myproddbserver/$newest/"*)
printf '%s\n' "${newest_files[@]}"
Bash 버전은 속도가 느릴 수 있지만 가능한 모든 파일 이름을 처리합니다. sort
파일 이름에 개행 문자가 포함되어 있으면 이 방법은 실패합니다.