Perlで実装されたdropboxのAPIを使ってUNIX likeなコマンドラインインターフェイス。でいいかな。これは便利。
- dropbox-api-command - DropboxでLinuxライクなコマンド操作を - Perl Advent Calendar Japan 2011 Casual Track
- GitHub - s-aska/dropbox-api-command: command line interface to access Dropbox API
インストールは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