ls 명령을 사용하여 매주 특정 파일을 가져옵니다.

ls 명령을 사용하여 매주 특정 파일을 가져옵니다.

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%V12월 31일과 1월 1일 사이의 유일한 변경 사항은 31일이 일요일인 경우뿐이므로 이 방법은 연도 변경에도 올바르게 작동합니다. 예 를 들어 2021-12-31 금요일 2022-01-01 토요일을 모두 제공합니다 .%G%V%Y%U202152202200

이것 은 단 두 %과목 입니다 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

관련 정보