나는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