読者です 読者をやめる 読者になる 読者になる

僕のYak Shavingは終わらない

車輪の再発明をやめたらそこには壮大なYakの群れが

lsとawkとdateとtouchを使ってファイルのタイムスタンプを1分進める

状況としてはrsyncをするときに転送元のファイルよりも転送先のファイルの方のファイルスタンプを進めることで、-uオプションをつけたときに転送元のファイルで転送先のファイルを更新しないようにする、とかです。

ニッチですね!!!

#!/bin/sh

[ -f $1 ] || exit 1

for path in $(cat $1)
do
    # フルパス
    file=/data/hoge/fuga/$path

    # ファイルのtimestampだけ抜き取る
    ts=`ls -l $file | awk '{printf "%04d%02d%02d %s",$9,$6,$7,$8}'`

    # 1分だけ進めたtimestampを作成する
    ts1=`date --date "$ts 1min" +"%Y%m%d %H:%M"`

    # touchでtimestampを変更
    touch -d "$ts1" $file

    # 表示
    echo $ts '=>' $ts1 $file

done

実行(filelistに更新したいファイルを改行区切りで書き込んである)

# sh update_timestamp.sh filelist

これでrsync -uをつけたときに、タイムスタンプの新しいものは更新されずに、追加分だけ転送されるようになります。