Wiki と荒らし (3)
書き換えられたページを特定したら、次はバックアップからページを元に戻す作業になる。
$ revert.rb ~/list.txt
revert.rb の中身はこの通り。
GZIP = '/usr/bin/gzip -cd' def restore(filename, gen = 1) out = [] buf = [] open("|#{GZIP} #{filename}", 'r').each do |line| if line =~ /^>>>>>>>>>> \d+$/ out.push buf buf = [] else buf << line end end out[0 - gen] end def revert(filename, buf) filename =~ %r|([^/]+)\.gz| file = $1 open("#{file}.txt", 'w') {|out| out.puts buf } end backup_dir = '~public_html/pukiwiki/backup' ARGF.each do |line| line =~ /(\w+).txt/ file = "#{backup_dir}/#{$1}.gz" revert(file, restore(file, 1)) end
最後に、 diff データを削除しておしまい。
$ cd ../diff $ cut -f2 ~/list.txt | xargs rm -f
…ところが、元に戻した数時間後に、また書き換えられる被害を受けてしまった。 このままじゃ、いたちごっこっぽい。