![Bash에서: 필터를 적용하고 이름의 날짜별로 정렬하고 가장 최근 날짜의 이름을 반환합니다.](https://linux55.com/image/157948/Bash%EC%97%90%EC%84%9C%3A%20%ED%95%84%ED%84%B0%EB%A5%BC%20%EC%A0%81%EC%9A%A9%ED%95%98%EA%B3%A0%20%EC%9D%B4%EB%A6%84%EC%9D%98%20%EB%82%A0%EC%A7%9C%EB%B3%84%EB%A1%9C%20%EC%A0%95%EB%A0%AC%ED%95%98%EA%B3%A0%20%EA%B0%80%EC%9E%A5%20%EC%B5%9C%EA%B7%BC%20%EB%82%A0%EC%A7%9C%EC%9D%98%20%EC%9D%B4%EB%A6%84%EC%9D%84%20%EB%B0%98%ED%99%98%ED%95%A9%EB%8B%88%EB%8B%A4..png)
Bash에서는 파일 이름 목록을 .csv로만 필터링하고 날짜 순서(타임스탬프가 아닌 이름의 날짜)를 기준으로 정렬한 다음 이름의 날짜 순서를 기준으로 최신 파일 이름을 반환하려고 합니다.
[root@server test2]# curl -l "ftp.fakeurl.com.au/In Stock Daily CSV/" --user username:password
InStockDaily01.07.19.csv
InStockDaily01.07.19.xls
InStockDaily02.07.19.csv
InStockDaily02.07.19.xls
InStockDaily03.06.19.csv
InStockDaily03.06.19.xls
InStockDaily03.07.19.csv
InStockDaily03.07.19.xls
InStockDaily04.06.19.csv
InStockDaily04.06.19.xls
InStockDaily04.07.19.csv
InStockDaily04.07.19.xls
InStockDaily05.06.19.csv
InStockDaily05.06.19.xls
InStockDaily05.07.19.csv
InStockDaily05.07.19.xls
InStockDaily06.06.19.csv
InStockDaily06.06.19.xls
InStockDaily07.06.19.csv
InStockDaily07.06.19.xls
InStockDaily08.07.19.csv
InStockDaily08.07.19.xlsx
InStockDaily09.07.19.csv
InStockDaily09.07.19.xls
InStockDaily10.07.19.csv
InStockDaily10.07.19.xls
InStockDaily11.06.19.csv
답변1
이 시도:
curl -l "ftp.fakeurl.com.au/In Stock Daily CSV/" --user username:password |
grep '\.csv$' |
sort -t. -k3,3 -k2,2 -k1,1 |
tail -n 1
grep '\.csv$'
CSV 행 가져오기sort -t. -k3,3 -k2,2 -k1,1
필드 구분 기호로 사용하여.
세 번째 필드 연도, 두 번째 필드 월, 날짜가 있는 첫 번째 필드별로InStockDailyXX
정렬tail -n 1
마지막 행(최신 날짜) 가져오기
답변2
에서는 zsh
다음을 통해 정렬된 목록을 얻을 수 있습니다 csv
.
list=(*.csv(oe'<REPLY=${(j::)${(s:.:Oa)REPLY}}>'))
그러면 최신이 켜져 있어요$list[-1]
*.csv(glob-qualifier)
: glob 한정자가 있는 globoe'<code>'
:o
쌍의 평가를 기반으로e
목록을 정렬합니다code
(코드는$REPLY
정렬 기준으로 변수를 설정함).${(s:.:Oa)REPLY}
: 해당 지점에서 변수(고려할 파일명이 포함된)를s
분할 하고 배열 인덱스를 기준으로 순서를 반대로 바꿉니다(목록을 뒤집음) . : 목록의 요소를 결합합니다. 따라서 처음에 glob의 새 값은 .$REPLY
O
a
${(j::)list}
$REPLY
InStockDaily10.07.19.csv
$REPLY
csv1907InStockDaily10
접두사는 항상 귀하의 예와 동일하다고 가정하십시오. 그렇지 않은 경우 다음을 사용할 수 있습니다.
list=(*.csv(oe'<REPLY=${(j::)${(Oas:.:M)REPLY%??.??.??.*}}>'))
%pattern
인수 확장 플래그와 함께 사용되면 추가된 패턴의 접미사가 의 끝 M
에서 추출됩니다 (따라서 대체됩니다 ) .M
$REPLY
$REPLY
csv190710
csv1907InStockDaily10