dropbox-api-commandをCygwinで使うメモ

Perlで実装されたdropboxAPIを使ってUNIX likeなコマンドラインインターフェイス。でいいかな。これは便利。

インストールはReadme通りに

wget https://raw.github.com/miyagawa/cpanminus/master/cpanm
perl cpanm App::dropboxapi

でよい。

Cygwinで使うときはLANGをUTF-8にしておくと日本語ファイルが文字化けしなくて便利。

$ export LANG=ja_JP.UTF-8

あと、syncの挙動を変えたかったのでちょっと中身をいじった。

$ diff /usr/local/bin/dropbox-api /usr/local/bin/dropbox-api.org
34d33
< unless($command){help('help'); exit(1)};
579c578
<                 (($remote_size != $local_size) and ($remote_epoch > $local_epoch)) or
---
>                 ($remote_size != $local_size) or
704c703
<                 if ((($remote_size != $local_size) and ($remote_epoch < $local_epoch)) or
---
>                 if (($remote_size != $local_size) or
  • 引数無しで実行した時にはhelpを出して終了
  • syncの際にファイルを上書きする条件を変更(サイズが違う&更新時間が新しいときにする)

ファイルの変更を行う時の条件はもっときめ細かくオプションで指定できると便利かなー。まあ適宜調節していけばよいか。

追記 2016/11/11

最新版では、こんな感じになってスッキリしていた。ほんとは != じゃなくて大小も判定したいけど、まあ実用上不都合もなさそうだからこのままでいいか。

   1114 sub has_change ($$) {
   1115     my ($local_path, $content) = @_;
   1116
   1117     my $remote_epoch = $strp->parse_datetime($content->{client_modified})->epoch;
   1118     my $local_epoch = $local_path->stat->mtime;
   1119     my $remote_size = $content->{size};
   1120     my $local_size = $local_path->stat->size;
   1121
   1122     if ($debug) {
   1123         printf "remote: %10s %10s %s\n", $remote_epoch, $remote_size, $content->{path_display};
   1124         printf "local:  %10s %10s %s\n", $local_epoch, $local_size, decode('locale_fs', $local_path);
   1125     }
   1126
   1127     if (($remote_size != $local_size) || ($remote_epoch != $local_epoch)) {
   1128         return 1;
   1129     }
   1130
   1131     return;
   1132 }
   1133