특정 날짜 범위 내에서 누락된 파일을 찾는 방법은 무엇입니까?

특정 날짜 범위 내에서 누락된 파일을 찾는 방법은 무엇입니까?

폴더에 있는 모든 파일을 탐색하고 특정 날짜에 어떤 파일이 누락되었는지 확인하고 싶습니다.

파일은 시간별로 분할되어 있으며 파일 이름에는 yyyy-mm-dd-hh형식이 있습니다.

따라서 2017-07-01와 사이에는 2017-07-0224개의 파일이 있습니다.2017-07-01-002017-07-01-23

위 날짜를 시작 날짜와 종료 날짜로 사용하는 경우 누락된 시간별 파일을 어떻게 찾을 수 있나요?

의견을 보내주셔서 감사합니다!

답변1

# presuming that the files are e. g. template-2017-07-01-16:

# To test a given date
for file in template-2017-07-01-{00..23}; do
  if ! [[ -f "$file" ]]; then
    echo "$file is missing"
  fi
done

# To test a given year
year=2017
for month in seq -w 1 12; do
    dim=$( cal $( date -d "$year-$month-01" "+%m %Y" | awk 'NF { days=$NF} END {print days}' )
    for day in $(seq -w 1 $dim); do
        for file in template-${year}-${month}-${day}-{00..23}; do
           if ! [[ -f "$file" ]]; then
             echo "$file is missing"
           fi
        done
    done
done

답변2

GNU 시스템에서:

#! /bin/bash -
ret=0
start=${1?} end=${2?}
t1=$(date -d "$start" +%s) t2=$(date -d "$end" +%s)

for ((t = t1; t < t2; t += 60*60)); do
  printf -v file '%(%F-%H)T' "$t"
  if [ ! -e "$file" ]; then
    printf >&2 '"%s" not found\n' "$file"
    ret=1
  fi
done
exit "$ret"

겨울철로 전환되는 날(서머타임을 구현하는 시간대) 전환 시 파일이 누락된 경우 오류 메시지가 두 번 나타날 수 있습니다. $TZ하루 24시간을 원하는 경우(예를 들어 이러한 파일을 생성하는 항목이 현지 시간 대신 UTC 시간을 사용하는 경우) UTC0으로 수정하세요.

답변3

다음과 같은 명령은 어떻습니까?

 grep -Fvf <(find * -type f \( -name "2017-07-02-00" $(printf " -o -name %s" 2017-07-02-{01..23}) \)) \
           <(printf "%s\n" 2017-07-02-{00..23})
ls
2017-07-02-01  2017-07-02-06  2017-07-02-08  2017-07-02-14  2017-07-02-19
2017-07-02-04  2017-07-02-07  2017-07-02-11  2017-07-02-15  2017-07-02-22

명령을 실행한 후 출력:

2017-07-02-00
2017-07-02-02
2017-07-02-03
2017-07-02-05
2017-07-02-09
2017-07-02-10
2017-07-02-12
2017-07-02-13
2017-07-02-16
2017-07-02-17
2017-07-02-18
2017-07-02-20
2017-07-02-21
2017-07-02-23

위에서 우리는 24개 파일의 모든 가능성을 생성하고 매개 변수를 printf전달했으며 이는 그녀에게도 도움이 되었습니다. 그런 다음 명령을 사용하여 이러한 파일의 존재를 인쇄합니다.find-nameprintfgrep무늬그러나 find그들은 발견되지 않았습니다.

답변4

왜 egrep을 사용하지 않습니까? 그런 다음 원하는 방식으로 정규식을 사용할 수 있습니다.

 egrep (2017-07-0[1-2]-\d\d$) *file name here*| tail     

정규식에 문제가 있을 수 있습니다. 죄송합니다.

관련 정보