[[FrontPage]] ---- #counter([total|today|yesterday]); 最終更新 &lastmod; #contents ---- *サイト内のhtmlファイルのメアド変更 [#a39003d0] サイトのバックアップ。 # tar cvfzp public_html_20131006.tar.gz public_html メアド変更 root@blackcube:/home/kuji # find . -type f -name '*.html' -print0 | xargs -0 perl -i.bak -pe 's/xxxxxxxx\@yahoo.co.jp/xxxxxxxxx\@gmail.com/g' root@blackcube:/home/kuji # find . -name "*.bak" -exec rm {} \; おかしくなってたら、 # tar xvfzp public_html_20131006.tar.gz で、元へとかえして、・・・ *サイト内のhtmlファイルのフォント指定追加 [#o152d43c] サイトのポリシーとしてIEでの表示フォントをメイリオ優先に統一することに。 <style type="text/css"> <!-- body,td,th {font-family: "ヒラギノ角ゴ Pro W3", "Hiragino Kaku Gothic Pro", "メイリオ", "Meiryo UI", "MS Pゴシック", "MS PGothic", Osaka, sans-serif;} --> </style> ちう行を<head>に埋め込むお仕事。ただし、ターゲットのファイル数は三桁。 と言うわけで、またまたワンライナーで一括変換をすることに。 さて、どうしたものか・・・ find . -type f -name '*.html' -print0 | xargs -0 perl -i.bak -pe 's/<\/HEAD>/<style type=\"text\/css\">\n <!\-\-\n body,td,th {font-family: "ヒラギノ角ゴ Pro W3", "Hiragino Kaku Gothic Pro", "メイリオ", "Meiryo UI", "MS Pゴシック", "MS PGothic", Osaka, sans-serif;} \n -->\n<\/style>\n<\/HEAD>/g' これだと、HEADが小文字だと書き換わらないので、s///ig で。最終的にはこれでどうよ? find . -type f -name '*.html' -print0 | xargs -0 perl -i.bak -pe 's/<\/HEAD>/<style type=\"text\/css\">\n <!\-\-\n body,td,th {font-family: "ヒラギノ角ゴ Pro W3", "Hiragino Kaku Gothic Pro", "メイリオ", "Meiryo UI", "MS Pゴシック", "MS PGothic", Osaka, sans-serif;} \n -->\n<\/style>\n<\/HEAD>/ig' ---- *htmlファイル名に「'」が含まれていると・・・ 2013年1月11日17:04 [#j6acd3c6] ファイル名が「who's-who.html」のように「'」が含まれていると、こんな風にエラーします。 blackcube# find . -type f -name '*.html' | xargs -n 10 nkf -s --overwrite xargs: unterminated quote blackcube# find . -type f -name '*.html' | xargs -n 10 nkf -s --overwrite blackcube# find . -type f -name '*.html' -print0 | xargs -0 perl -i.bak -pe 's/iso-2022-jp/Shift_JIS/g' blackcube# find . -name "*.bak" -exec rm {} \; ついでに、.htm なファイルも面倒みておく blackcube# find . -type f -name '*.htm' | xargs -n 10 nkf -s --overwrite blackcube# find . -type f -name '*.htm' -print0 | xargs -0 perl -i.bak -pe 's/iso-2022-jp/Shift_JIS/g' blackcube# find . -name "*.bak" -exec rm {} \; ---- *nkf がインストールされていないと、 [#x7933434] 2013年1月11日 こういうエラーがでて、訳がわからなくなりますw blackcube# find . -type f -name '*.html' | xargs -n 10 nkf -s --overwrite xargs: unterminated quote blackcube# find . -type f -name '*.html' | xargs nkf -s --overwrite xargs: unterminated quote blackcube# blackcube# find . -type f -name '*.html' | xargs -0 nkf -s --overwrite xargs: insufficient space for argument blackcube# blackcube# find . -type f -name '*.html' | xargs -0 -n 10 nkf -s --overwrite xargs: insufficient space for argument blackcube# find . -type f -name '*.html' | xargs -0 -n 5 nkf -s --overwrite xargs: insufficient space for argument blackcube# blackcube# blackcube# find . -type f -name '*.html' | xargs -n 10 nkf -s --overwrite xargs: unterminated quote blackcube# find . -type f -name '*.html' | xargs -n 10 -0 nkf -s --overwrite xargs: insufficient space for argument blackcube# find . -type f -name '*.html' | xargs -n 1 -0 nkf -s --overwrite xargs: insufficient space for argument blackcube# blackcube# ---- *safari では、文字化けする.htmlファイル [#j0b0c8d1] safariだと、 <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <meta name="GENERATOR" content="Mozilla/4.7 [ja] (Macintosh; I; PPC) [Netscape]"> <title>健康相談窓口</title> </head> は、OKだけど、 <HEAD> <TITLE>パーマ液・ヘアーカラー剤の毒性</TITLE> <META NAME="Author" CONTENT=""> <META NAME="GENERATOR" CONTENT="User-Agent: Mozilla/3.01Gold [ja] (Macintosh; I; PPC)"> </HEAD> が化ける。 find . -type f -name '*.html' -print0 | xargs -0 perl -i.bak -pe 's/META NAME="Author" CONTENT=""/meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"/g' でどうだろう? Bareword found where operator expected at -e line 1, near "s/META NAME="Author" CONTENT=""/meta http-equiv="Content-Type" content="text/html" String found where operator expected at -e line 1, at end of line (Missing semicolon on previous line?) syntax error at -e line 1, near "s/META NAME="Author" CONTENT=""/meta http-equiv="Content-Type" content="text/html" Can't find string terminator '"' anywhere before EOF at -e line 1. blackcube:niihamai {68} % ん~~~!? あ、そっか、「/」をエスケープせねば・・・ってことね。 find . -type f -name '*.html' -print0 | xargs -0 perl -i.bak -pe 's/META NAME="Author" CONTENT=""/meta http-equiv="Content-Type" content="text\/html; charset=Shift_JIS"/g' で、OK。 *.htmlなファイルだけコード変換して、ファイル内部の文字列も置換する [#gea331bb] カレントディレクトリ以下のファイル群の一括変換のワンライナー blackcube:niihamai {19} % find . -type f -name '*.html' | xargs -n 10 nkf -s --overwrite blackcube:niihamai {20} % find . -type f -name '*.html' -print0 | xargs -0 perl -i.bak -pe 's/iso-2022-jp/Shift_JIS/g' 問題がないようなら、*.bak ファイルを消去 find . -name "*.bak" -exec rm {} \; ---- *カレントディレクトリ以下の全ファイルを Shift_JIS に変換する場合 [#k28dddf1] 但し、これだけだと、画像ファイルなども問答無用で適応される風なので、画像データがおかしくなるようです。 $ find . -type f | xargs -n 10 nkf -s --overwrite もしくは、 $ find . -type f -exec nkf -s --overwrite {} \; http://masaoo.blogspot.com/2009/02/find-nkf-xargs.html *あるディレクトリ以下の複数ファイル内の文字列を一括で置換するワンライナー [#g457d4fa] http://d.hatena.ne.jp/rx7/20090207/p2 $ find . -type f -name '*.html' -print0 | xargs -0 perl -i.bak -pe 's/from/to/g' $ find . -type f -name '*.html' -print0 | xargs -0 perl -i.bak -pe 's/iso-2022-jp/Shift_JIS/g' findとperl+正規表現で。 上の例は、今いるカレントディレクトリ以下の全ての".html"ファイル内の"from"という文字列を全て"to"に置き換えるワンライナー。 変更が行われたファイルは全て".bak"という拡張子で元のファイルがバックアップされます。 # ちなみに、"-i"の後ろに拡張子を書かないと実行すると、バックアップは取られず書き換えられる。 ファイル名に空白文字が入る場合も考慮して、findに-print0オプションを付けて、xargs -0で受け取るようにしたけど、そんなパターンねーよ、って場合は、上記オプションは不要です。 blackcube:niihamai {20} % find . -type f -name '*.html' -print0 | xargs -0 perl -i.bak -pe 's/iso-2022-jp/Shift_JIS/g'