揮発性のメモ2

知識をメモ書きしておく

JDでDAT落ちしたログを消去する 2

http://d.hatena.ne.jp/iww/20130705/jd
のやり方だと問題が2点ある

  1. 過去ログを表示する設定にしていない板では削除されない
  2. 最近見てない板の過去ログは削除されない


subject.txtを取得して削除するよう改良した

#!/bin/bash

BASE=${JD_CACHE:-~/.jd}
cd $BASE

set -o pipefail
for A in $(find ./ -name subject.txt | sort -R); do
	URL=http://${A#./}
	DIR=${A%/subject.txt}
	SUB=`mktemp /tmp/sub.XXXXXXXX`

	echo check $URL
	wget -q --timeout=30 -t1 $URL -O- | perl -ple 's/^(.+?)(\.cgi)?[<,].*$/\1/ || exit 1' | sort > $SUB
	if [ $? -eq 0 ]; then
		cd $BASE/$DIR
		ls | diff -u - $SUB | perl -nle 'if(/^-(\d+)(\.dat)?.*$/){ print "$1$2"; unlink "info/$1","info/$1.info","$1$2"; }'
	else
		echo ERROR
	fi

	rm $SUB
done
  • 手元のログにあってsubject.txtに無いログを削除する
  • subject.txtの書式は次の通り
    • ふつう : 1234567890.dat<>ほげほげ 1234567890.datだけ残す
    • まちBBS: 1234567890.cgi,ほげほげ 1234567890 だけ残す
  • wgetがエラーのときはもちろん、取得したsubject.txtがおかしいときにも処理を中断するようにする
    • pipefailについてはここ
  • お気に入りやしおりのついたログも全て削除する