特定の日付の行を抽出し、各日付に対してコマンドを実行します。

特定の日付の行を抽出し、各日付に対してコマンドを実行します。

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'

例ではファイルを検索します。最新特定の日付より...

したがって、まったく難しくはありませんが、何らかの理由で呼び出しごとに1つの引数しか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

関連情報