ls
누군가가 명령을 사용하여 주간 파일을 가져오도록 도와줄 수 있습니까?
ls -t {path} | grep -e "-1700" | head -30 | sort -r
이 ls
명령을 사용하면 아래에 언급된 출력을 얻었습니다.
2022.05.30-1700
2022.05.28-1700
2022.05.26-1700
2022.05.25-1700
2022.05.22-1700
2022.05.21-1700
2022.05.18-1700
2022.05.17-1700
2022.05.16-1700
2022.05.15-1700
2022.05.14-1700
2022.05.13-1700
2022.05.12-1700
2022.05.09-1700
2022.05.08-1700
2022.05.02-1700
2022.04.26-1700
2022.04.24-1700
2022.04.23-1700
2022.04.21-1700
2022.04.17-1700
2022.04.16-1700
2022.02.25-1700
2022.02.19-1700
2022.02.12-1700
2022.02.11-1700
2022.01.29-1700
2022.01.23-1700
2022.01.22-1700
2022.01.15-1700
하지만 일주일에 한 번만 빌드하면 됩니다.
다음과 같은 예:
2022.05.21-1700
2022.05.14-1700
2022.05.07-1700
...
...
...
답변1
토요일 콘텐츠를 선택하고 GNU를 사용한다고 가정하면 다음과 같이 할 수 있습니다.
ls {path} |
tr .- '- ' |
LC_ALL=C date -uf - '+%A %Y.%m.%d-%H%M' |
grep -Po '^Saturday \K.*-1700'
어떤 시스템에서든 glob 한정자 함수를 사용 하여 zsh
동일한 작업을 수행할 수 있습니다.
zmodload zsh/datetime
On{Mon,Tue,Wed,Thu,Fru,Sat,Sun} () {
local t
TZ=UTC0 strftime -rs t %Y.%m.%d-%H%M $REPLY:t &&
TZ=UTC0 LC_ALL=C strftime -s t %a $t &&
[[ $0 = On$t ]]
}
그런 다음:
print -rC1 -- <1900-2100>.<1-12>.<1-31>-1700(N+OnSat)
토요일에 오시는 분들을 위해
귀하의 샘플에서 그들은 다음을 제공합니다:
2022.01.15-1700
2022.01.22-1700
2022.01.29-1700
2022.02.12-1700
2022.02.19-1700
2022.04.16-1700
2022.04.23-1700
2022.05.14-1700
2022.05.21-1700
2022.05.28-1700
매주 토요일에 대한 파일이 없기 때문에 약간의 공백이 있음을 알 수 있습니다.
일주일에 한 번(늦어도 매주)(일요일부터 토요일까지 매주) 받으려면 다음을 수행하세요.
ls -r {path} |
tr .- '- ' |
date -uf - '+%Y%U %Y.%m.%d-%H%M' |
uniq -w6 |
cut -d' ' -f2
귀하의 샘플은 다음을 제공합니다.
2022.05.30-1700
2022.05.28-1700
2022.05.21-1700
2022.05.14-1700
2022.05.02-1700
2022.04.26-1700
2022.04.23-1700
2022.04.16-1700
2022.02.25-1700
2022.02.19-1700
2022.02.12-1700
2022.01.29-1700
2022.01.22-1700
2022.01.15-1700
(토요일에 전부는 아닙니다).
월요일부터 일요일까지의 주에는 (ISO 연도 및 숫자) %Y%U
로 바꿉니다. %G%V
12월 31일과 1월 1일 사이의 유일한 변경 사항은 31일이 일요일인 경우뿐이므로 이 방법은 연도 변경에도 올바르게 작동합니다. 예 를 들어 2021-12-31 금요일 과 2022-01-01 토요일을 모두 제공합니다 .%G
%V
%Y%U
202152
202200
이것 은 단 두 %
과목 입니다 date
.주는 다른 날에 시작됩니다.우리는 다른 접근 방식을 취해야 합니다.
예를 들어, 해당 날짜의 에포크 시간을 UTC로 해석하고 이를 주의 초 수로 나눈 다음 원하는 주의 첫날로 적절하게 오프셋하여 연도의 첫날과 관련된 문제를 피할 수 있습니다.
예를 들어, 일요일에 시작하는 주의 경우:
ls -r {path} |
tr .- '- ' |
date -uf - '+%s %Y.%m.%d-%H%M' |
awk '{week = int(($1 / 86400 - 3)/ 7)}
week != last {print $2}
{last = week}'
월요일에 시작하는 주로 또는 토요일에 시작하는 주로 - 3
바꿉니다 .- 4
- 2
또는 다음을 사용하여 zsh
:
zmodload zsh/datetime
typeset -A latest=()
for f (<1900-2100>.<1-12>.<1-31>-1700(N))
TZ=UTC0 strftime -rs t %Y.%m.%d-%H%M $f &&
latest[$(( (t / 86400 - 3) / 7 ))]=$f
print -roC1 -- $latest