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をつけたときに、タイムスタンプの新しいものは更新されずに、追加分だけ転送されるようになります。