Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/moicci/webdav-sync
Ruby script to synchronize local files and WebDAV files.
https://github.com/moicci/webdav-sync
Last synced: 4 days ago
JSON representation
Ruby script to synchronize local files and WebDAV files.
- Host: GitHub
- URL: https://github.com/moicci/webdav-sync
- Owner: moicci
- Created: 2014-01-14T03:23:54.000Z (almost 11 years ago)
- Default Branch: master
- Last Pushed: 2015-04-03T06:58:37.000Z (over 9 years ago)
- Last Synced: 2023-08-01T06:11:56.948Z (over 1 year ago)
- Language: Ruby
- Size: 180 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# webdav-sync
このツールは WebDAV サーバ上のファイルと、ローカルマシンのファイルとを同期するもので、プライベートDropbox的な使い方ができます。
元々このツールは私が音楽ファイルを自宅とオフィスとで共有するために作ったものです。
自宅PC -- upload --> 会社WebDAVサーバ -- download --> 会社PC という構成で同期しています。## 準備
### WebDAV サーバ
まずは WebDAV サーバを用意しましょう。Apache であればよほど古いバージョンのものでない限り標準で WebDAV 機能を持っています。httpd.conf にこんな設定を加えれば OK です。
```
DavLockDB "/usr/local/apache2/logs/DavLock"Alias "/dav" "/storage/dav"
Dav On
Order Allow,Deny
Allow from all```
このホストを仮に webdav.com とすると http://webdav.com/dav で WebDAV にアクセスできます。
### クライアント
Bundler を使って依存ライブラリをインストールするので、予め Bundler が必要です。
どうしても Bundler が使えない場合、依存ライブラリはひとつだけなので `gem install termcolor` でもOKです。```
git clone https://github.com/moicci/webdav-sync.git
cd webdav-sync
bundle install
```## 使い方
clone したディレクトリにある upload.rb/download.rb がそれぞれアップロード、ダウンロードを実行するスクリプトです。
```
Usage: upload [options]
-v, --verbose verbose
-n, --noexec ディレクトリ作成、ファイルアップロード、ダウンロードの実行はしない
-l, --local dir ローカルのトップディレクトリ
-i, --includes file 対象とする入力元ディレクトリを書いたファイル
-e, --excludes file 除外する入力元ディレクトリを書いたファイル
-E, --excludes-to file 成功したディレクトリを出力するファイル
-r, --retries retries コピー等のエラー時のリトライ回数
-d, --newer datetime 指定された日時より新しい物だけを対象とする。
-s, --script script ダウンロードされたファイル名を渡すスクリプト
-u, --url url DAVサーバのエンドポイント
```下記のような構成を考えてみます。
ノード|同期ディレクトリ
---|---
PC-A|/Users/xx/A/
PC-B|/Users/yy/B/WebDAVサーバのエンドポイント http://webdav.com/dav/
### PC-A -> WebDAV
PC-A からアップロードするときはこれで。
```
ruby upload.rb \
--url=http://webdav.com/dav/ \
--local=/Users/xx/A
```### WebDAV -> PC-B
PC-B にダウンロードするときはこれで。
```
ruby download.rb \
--url=http://webdav.com/dav/ \
--local=/Users/yy/B
```PC-A, PC-B はそれぞれアップロード、ダウンロード専用というわけではないので
どちらがアップロードするか分からないけど、常時最新にしたい場合は、それぞれで
upload.rb, download.rb の両方を実行します。### 同期の対象ファイル
以下のファイルだけがアップロード、ダウンロードの対象となり、他は無視されます。
- アップロードの場合
- ローカルファイルがDAVサーバに無いとき
- ローカルファイルとDAVサーバ上のファイルサイズが違うとき- ダウンロードの場合
- DAVサーバにあって、ローカルにファイルがないとき
- DAVサーバ上のファイルとローカルのファイルサイズが違うとき- 強制的に除外
- `--excludes` オプションで指定するテキストファイルに、除外するディレクトリ名を列挙できます。
私の場合、このようにして一度アップロードしたディレクトリは二度とチェックしないようにしています。
```
ruby upload.rb --verbose \
--url=http://webdav.com/dav/music/ \
--local=/Users/xxx/Music \
--excludes=excludes.txt \
--excludes-to=excludes.txt
```### ダウンロード後の処理
私の場合、音楽ファイルの同期に使っているので、ダウンロードしたファイルは iTunes に勝手に登録されて欲しいです。
というわけで、clone したディレクトリにある AppleScript itunes_add.scpt で iTunes に登録しています。
`--script` で実行スクリプトを指定しており `itunes_add.scpt ファイル名` のように第二引数でファイル名のフルパスがわたされます。```
ruby download.rb --verbose \
--url=http://webdav.com/dav/music/ \
--local=/Users/xxx/Music \
--script=./itunes_add.script
```では、お楽しみを。