해당 날짜에 파일과 개수가 없을 때 개수를 0으로 가져오는 Unix 명령

해당 날짜에 파일과 개수가 없을 때 개수를 0으로 가져오는 Unix 명령

파일이 수신되지 않은 이후의 날짜 목록을 얻는 방법. 파일 수와 날짜를 얻으려면 다음 명령을 사용하십시오.

find . -maxdepth 1 -type f -printf '%TY-%Tm-%Td\n' | awk '{array[$0]+=1}END{ for(val in array) print val" "array[val]   }'|sort

산출:

2019-05-09 1
2019-05-10 3
2019-05-13 2
2019-05-14 5
2019-05-15 1
2019-05-16 2
2019-05-17 1
2019-05-20 2

또한 누락된 날짜를 0으로 계산해야 합니다. 예를 들어:

2019-05-12 0

답변1

다음 코드를 사용해 보세요:

TIME_STAMP=(`find . -maxdepth 1 -type f -printf '%TY-%Tm-%Td\n' | sort | sed -e 1b -e '$!d'`)
LIST ()
{
        date1=$1
        date2=`date -d "$date1 + 1 day" +"%Y-%m-%d"`
        find . -maxdepth 1 -type f -newermt $date1 ! -newermt $date2 | echo "$date1 `wc -l` "
        [ $date1 == $2 ] && exit 0;
        LIST $date2 $2
}
LIST ${TIME_STAMP[0]} ${TIME_STAMP[1]}

답변2

date0='20190501'
date1='20190622'
numDays=$(( ( $(date -d "$date1" +'%s' ) - $(date -d "$date0" +'%s' ) ) / (60*60*24) ))
for day in $( seq 0 $((numDays-1)) ); do
  d=$(date -d "$date0 + ${day}days" +"%Y-%m-%d")
  echo $d $( find . -maxdepth 1 -type f -newermt "$d"  ! -newermt "$d + 1day" | grep '.' -c )
done

date0와 의 차이로 일수를 구하고 date1매일 반복하여 찾은 결과를 인쇄합니다.

xarg 버전

date0='20190501'
date1='20190622'
seq 0 $(( ( $(date -d "$date1" +'%s' ) - $(date -d "$date0" +'%s' ) ) / (60*60*24) )) \
  | head -n -1 \
  | xargs -I{} date -d "$date0 + {}days" +%Y%m%d \
  | xargs -I{1} bash -c 'echo {1} $(find . -maxdepth 1 -type f -newermt "{1}" ! -newermt "{1} + 1day" | grep "." -c)'

관련 정보