특정 날짜의 행을 추출하고 각 날짜에 대한 명령을 실행합니다.

특정 날짜의 행을 추출하고 각 날짜에 대한 명령을 실행합니다.

나는Google 드라이브 명령줄 스크립트다음과 같은 파일 목록이 반환될 수 있습니다.

Id                             Title                       Size     Created
0Bxxxxxxxxxxxxxxxxxxxxxxxxxx   backup-2014-12-26.tar.bz2   569 MB   2014-12-26 18:23:32

15일이 지난 파일을 삭제하고 싶습니다.

다음 명령을 어떻게 실행할 수 있습니까?

drive delete --id 0Bxxxxxxxxxxxxxxxxxxxxxxxxxx

날짜가 15일보다 오래된 Id모든 행 에 대해 ?Created

답변1

분명히 Google API를 사용하여 필요에 따라 파일을 구체적으로 나열하고 정렬할 수 있습니다.(에서 drive --help):

list:
    -m, --max      Max results
    -q, --query    Query (see https://developers.google.com/drive/search-parameters)

...그리고 링크에서...

  • 2012년 6월 4일 이후에 수정된 파일 검색
    moddedDate > '2012-06-04T12:00:00' //기본 시간대는 UTC입니다.
    수정일 > '2012-06-04T12:00:00-08:00'

예제에서는 파일을 검색합니다.최신특정 날짜보다...

따라서 전혀 어렵지는 않지만 어떤 이유로든 drive호출당 하나의 인수만 처리할 수 있는 것처럼 보입니다.

mdate_list() { drive list -nq \
    "modifiedDate $1 '$(date -ud"$2" '+%FT%T')' and \
     mimeType != 'application/vnd.google-apps.folder'"
}  
rmdrv() for dfile do drive delete -i "$dfile" || return; done

set -f; unset IFS            #no split data mangling, please
while   set -- $(mdate_list \< '15 days ago'|cut -d\  -f1)  
        [ "$#" -gt 0 ]
do      rmdrv "$@" || ! break
done

단일 목록에서 처리할 드라이브 파일이 너무 많은 경우 에만 while루프를 설정했습니다. 대부분의 경우 사용하지 않고도 쉽게 벗어날 수 있지만 파일이 많으면 거기까지 목록이 계속 채워집니다. 더 이상 없습니다.

나머지는 귀하가 제공한 데이터를 기반으로 수행됩니다. 여기서는 특별히 폴더를 제외했지만 다른 조정이 필요한 경우 언급된 링크도 확인하는 것이 좋습니다.

답변2

매우 간단합니다.awk

drive list |\
awk 'BEGIN{ "date +%s -d -15\\ days" | getline n }
        $6{ m=$5"\\ "$6
            ("date +%s -d "m) | getline t
            if(t < n) system("drive delete -id "$1) }' 

답변3

파일 목록이 라는 파일에 있다고 가정하면 x.txt다음 bash 스크립트가 작업을 수행합니다.

#!/bin/bash

IFS="\n"
for i in $(cat x.txt)
do
    fid=$(echo $i | awk '{print $1}') # extract the file id
    d=$(echo $i | awk '{print $5}') # extract the date filed
    d2=$(date -d "$d" +%s)  # convert it to epoch sec

    now=$(date +%s) # current time in epoch sec
    diff=$(( (now - d2) / 86400 )) # find diff and convert it to days
    echo "The file $fid is $diff days old"
    if (( $diff > 15 )) #if the diff is greater than 15 
    then
      #delete file
      drive delete --id $fid
    fi
done

관련 정보