rsync で日付指定(パターン指定)同期みたいなことをする

rsync であるディレクトリから別ディレクトリへファイル同期するのはこんな感じに簡単にできます。

 

rsync -av /src/path/ /dst/path/

 

が、そこにパターンであったり日付指定であったりを条件付けすることができない。フィルタルールを使えば良いのだろうけども、フィルタルールでは日付指定はやっぱりできない。

なので find に必要なファイルを探してもらって rsync の --files-from に渡せばよいのではないか。

find で日付指定みたいなことをするには、ある特定の日時を持ったファイルを作成しておけばそれを基準に検索できる。

本日0時0分以降に更新されたファイルをターゲットとして /src/path/ から /dst/path/ へ同期するっていうのはこんな感じ。

 

#!/bin/sh
SRCPATH=/src/path/
DSTPATH=/dst/path/
touch -t `date +%Y%m%d0000` /tmp/today0000
find ${SRCPATH} -type f -newer /tmp/today0000 | \
sed -e "s|^${SRCPATH}||" | \
rsync -av --files-from=- ${SRCPATH} ${DSTPATH}

 

とちゅうに sed をはさんでいるのは、行き先の /dst/path に /src/path のフルパスのツリー構造を再現して欲しくないから。

もともとの rsync だけのときと同じツリー構造になってほしいから、そこんところだけ除外する方向で。