スタティックhtmlであるマンホール漫遊記の中のはてなダイアリーへのリンクを自動コンバートされたはてなブログへのリンクに書き換える。
before:http://d.hatena.ne.jp/doroace/20101011
after:https://doroace.hatenadiary.jp/entries/2010/10/11
行数を調べる。
kazz@oscar ~/homepage/lance/manhole# grep "http:\/\/d\.hatena\.ne\.jp\/doroace\/" **/*.html |wc -l 957
957行もある。人力では無理。
sedの置換スクリプト。{}のエスケープに引っかかりがち。
s/http:\/\/d\.hatena\.ne\.jp\/doroace\/\([0-9]\{4\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)/https:\/\/doroace\.hatenadiary\.jp\/entries\/\1\/\2\/\3/g
grepとxargsとsedで一括置換。-iオプションでバックアップファイルを残す。最近知ったzshの**を使う。
kazz@oscar ~/homepage/lance/manhole# grep "http:\/\/d\.hatena\.ne\.jp\/doroace\/" **/*.html -l|xargs sed -i."bak" -f doroace.sed
処理自体は一瞬で完了。内容も確認、無事置換できていた。
タイムスタンプが変わってしまったので更新作業がやりにくくなってしまった。シェルスクリプトかphpスクリプトでタイムスタンプを戻してやればよかった。
追記
戻した。
<?php $oldfile = $argv[1]; $newfile = str_replace(".bak", "", $oldfile); $timestamp = filemtime($oldfile); touch($newfile, $timestamp); ?>
kazz@oscar ~/homepage/lance/manhole# find . -name *.html.bak -mtime +0 -exec php timestamp.php {} \;