서버에 1-10번 폴더가 여러 개 있습니다. 각 폴더에는 여러 개의 파일이 있습니다. 다음과 같은 스키마 이름을 가진 최신 파일을 찾아야 합니다.
- 파일 1: NA_UW_CLUSTER_RESULTS_210916.zip
- 파일 2: UW_CLUSTER_RESULTS_210916.zip
"파일 2"를 선택하고 1-10번의 해당 폴더가 여러 개 있는 다른 서버에 복사해야 합니다.
UW_CLUSTER_RESULTS_210916.zip
따라서 서버 "A"의 "Folder 1"에서 일치하는 패턴을 가진 최신 파일()을 서버 "B"의 "Folder 1"로 복사 해야 합니다 .
답변1
아마도 이것은 귀하의 사용 사례에 충분할 것입니다.
ls -1 -td /dir1/prefix1* /dir2/prefix2* | head -n 1
또는 더 강력하게:
find /dir1 /dir2 -type f \( -path "*dir1/prefix1*" -o -path "*dir2/prefix2*" \) -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "
답변2
그리고 zsh
:
set -o extendedglob
for folder ('folder '<->(n/))
scp $folder/*CLUSTER_RESULTS_[0-9](#c6).zip(om[1]) B:$folder/
일부 zsh 고급 glob 연산자를 사용합니다.
<->
, 이는<5-20>
숫자와 일치하는 연산자이지만 여기에는 제한이 없으므로 모든 십진수와 일치할 수 있습니다.[0-9]
: zsh에서 0123456789 문자만 일치합니다(다른 쉘이 일반적으로 일치하는 수백 문자 대신).(#c6)
: 확장 정규 표현식과 유사합니다{6}
. : 처음 6개 항목과 일치하므로 여기에 숫자가 있습니다(필수extendedglob
).(om[1])
: 이 부분은 전역 한정자입니다.om
수정 시간을 기준으로o
정렬m
(최신순) 하고[1]
첫 번째 항목을 선택하세요. 폴더 glob은 또한n
glob 결과를 숫자로 정렬하는 glob 한정자를 사용합니다 (따라서 와 사이가 아닌folder 10
후처리 후 ). 디렉토리 유형 파일로 제한됩니다.folder 9
folder 1
folder 2
/