日付毎のログファイルを一週間毎にディレクトリにまとめる(bash)

ログファイルが日付毎に作成されてて大変な事になっていたので、一週間毎にディレクトリにまとめました。

ファイルのフォーマットは xxxxxxx_yyyy_mm_dd.log です。

#!/bin/bash
for file in *.log; do
    d="${file//xxxxxx_/}" # replace
    d="${d//.log/}"
    IFS='_'
    set -- $d
    echo "$d"
    weekday=`date -v$1y -v$2m -v$3d "+%w"`
    if [ "$weekday" = "1" ] 
    then
      echo "mkdir"
      dir=$d
      mkdir "$dir"
    fi
    mv "$file" "$dir/$file"
done

シェル書くことないから勉強になりました。
※ファイルは月曜日から始まっている前提です。

Time Machine で新規のバックアップを作成する必要があります とメッセージが表示される

MacBook Pro を電源につなぐと自動で Time Machine でバックアップが始まるようにしていますが、昨日バックアップを作成しようとしたところ、

Time Machine はバックアップの検証を完了しました。
信頼性を向上するために、Time Machine は新規バックアップを作成する必要があります。

というメッセージが表示され、バックアップを作成するには、新規のバックアップを作成する必要がある(バックアップの履歴は全て削除される)という現状に成ってしまいました。

空白_Skitch_キャンバス

フォーラムにも同じ内容のポストが有って、解決方法が載っていたので、その通り実行したらリペアできました。
「新規バックアップが必要」というメッセージがでてくる | Apple サポートコミュニティ.

リペア手順

時間のかかる作業なので、電源が切れないように設定して実行します。
次に、Time Machine バックアップに使っているドライブをファイル共有でマウントします。
マウント後、下記のコマンドを実行してリペアしました。

[suusuke@macbookpro ~]$ ll /Volumes/timemachine/
total 0
drwxrwxrwx@ 1 suusuke  staff  264 10 26  2011 Network Trash Folder
drwxrwxrwx@ 1 suusuke  staff  264 10 26  2011 Temporary Items
drwxrwxrwx@ 1 suusuke  staff  296 11  9 21:07 suusuke の MacBook Pro.sparsebundle
drwxrwxrwx@ 1 suusuke  staff  264  4  9  2014 suusuke の MacBook.sparsebundle
drwxrwxrwx  1 suusuke  staff  264 11  9 23:10 trashbox

[suusuke@macbookpro ~]$ sudo chflags -R nouchg /Volumes/timemachine/suusuke\ の\ MacBook\ Pro.sparsebundle
Password:

[suusuke@macbookpro ~]$ hdiutil attach -nomount -noverify -noautofsck /Volumes/timemachine/suusuke\ の\ MacBook\ Pro.sparsebundle
/dev/disk2          	GUID_partition_scheme          	
/dev/disk2s1        	EFI                            	
/dev/disk2s2        	Apple_HFS                      	

[suusuke@macbookpro ~]$ fsck_hfs -drfy /dev/disk2s2
...

[suusuke@macbookpro ~]$ hdiutil detach /dev/disk2s2 
"disk2" unmounted.
"disk2" ejected.

フォーラムの解決リンク先に、コマンドの説明が書いています。
Fix Time Machine Sparsebundle NAS Based Backup Errors | Garth Gillespie.

Time Machine のドライブをアンマウントして、バックアップを実行すると問題なく実行できました。

timemachine

VirtualBox で ゲストOS の日時変更

構成

HOST Mac OS X
GUEST CentOS 5.9

Cron のテストしたいなと思って、CentOS から date コマンドで日時を変更しようと思って実行したところ、1秒位で元に戻ってしまう。。。

どうやら、VirtualBox はゲストとホストの時間を自動で合わせてくれているようで、ゲストとホストのロケールが違う環境でも、ゲストのロケールに合わせて時間を変更している。

時間を変える場合は、ホスト側の時間を変更すればOK。

補足

ホスト側の時間を毎回変更するのではなく、VirtualBoxで変更する事もできる。
まずは、現在の情報を確認。

$ vboxmanage showvminfo "vm名"
...
Time offset:     0 ms

Time offsetを変更。

$ vboxmanage modifyvm "vm名" --biossystemtimeoffset 32400000
$ vboxmanage showvminfo "vm名"
...
Time offset:     32400000 ms

Macで文字コード変換

Windows の場合は、KanjiTranslator が便利で使っているのですが、Macはアプリケーションでやるより、nkfコマンドで変換するのが一般的なようです。

nkfコマンドインストール

Mac Portsでインストールしました。
そろそろhomebrew使ったほうが良いかも

$ sudo port install nkf

文字コードを確認

オプション -g で確認できます。

$ nkf -g ~/vagrant/centos59_64/home/sample/public_html/index.php 
EUCJP-MS

UTF-8(BOMなし)コードへ変換

オプション -w で変換します。
上書きする場合は、–overwriteを指定します。

$ nkf -w --overwrite ~/vagrant/centos59_64/home/sample/public_html/index.php 
$ nkf -g ~/vagrant/centos59_64/home/sample/public_html/index.php 
UTF-8

その他の文字コードへの変換方法は

$ man nkf

で確認できます。

WordPress の表示速度を早くする(イメージ編)

WordPressの表示速度がやたら遅いので、まずは画像のりサイズをすることにしました。
他には、jsなど余計なリソース読み込んでいることも原因ですがまずはリサイズをしてみました。

インストールしたプラグイン

WordPress › EWWW Image Optimizer « WordPress Plugins.

リサイズ実行

管理画面から、アップロードしたイメージ、テーマファイルで使われているイメージをリサイズしました。
新たにアップロードするイメージについては、自動的にリサイズされるようになります。
Bulk_Optimize_‹_suusuke_-_blog_—_WordPress

リサイズ前

Latest_Performance_Report_for__http___blog_suusuke_info____GTmetrix

リサイズ後

Latest_Performance_Report_for__http___blog_suusuke_info____GTmetrix 2

IE で Option の jQuery.toggle() が動作しない

あるタイミングで、Optionの中身を非表示にしたいと言う事ある。
jQueryでそれを書こうとすると

$([selector]).toggle(false);
$([selector]).css('display', 'none');

のどちらかで非表示にできるはずですが、IEでは表示になりません。

なので、Option を コピーして擬似的にtoggleを実装します。

$(function() {
    $('body').append('<select id="copy" style="display:none;"></select>');
    $('select[name=list]').eq(0).children().clone().prependTo('#copy');

    $('input[type=radio][name=switch]').change(function() {
        switchEventTime($('input[type=radio][name=switch]:checked'));
    });

    switchEventTime($('input[type=radio][name=switch]:checked'));
    function switchEventTime(_this) {
        if (!_this) {
            return false;
        }

        var val = $(_this).val();
        if (val == '1') {
            var cur = $('select[name=list]').val();
            $('select[name=list]').children().remove();
            $('#copy').children().each(function () {
                var option = $(this);
                if (option.val() != '') {
                    return;
                } else {
                    $('select[name=list]').append(option.clone());
                }
            });
            $('select[name=list]').val(cur);
        } else {
            var cur = $('select[name=list]').val();
            $('select[name=list]').children().remove();
            $('#copy').children().each(function () {
                var option = $(this);
                $('select[name=list]').append(option.clone());
            });
            $('select[name=list]').val(cur);
        }
    }
});

バーチャルホストに定義されてないドメインからのアクセスをエラーにする設定

バーチャルホストに定義されてないドメインからアクセスされた場合は、バーチャルホストの設定の一番上に設定されたドメインが有効になります。

定義されてないドメインからアクセスされた場合は、エラーにしたかったので、バーチャルホストの設定ファイルの一番上に

<VirtualHost *:80>
    ServerName dummy
    <Location />
        Order deny,allow
        Deny from All
    </Location>
</VirtualHost>

と書いて、再起動すると定義されてないドメインからアクセスされた場合は403エラーを返すようになりました。

スマートフォンでアクセスした際に W3 Total Cache が原因で WPtouch が有効にならない対応

タイトル通りですが、スマートフォンでアクセスしてもキャッシュされたPCのページが表示されていたので気付きました。

W3 Total Cache の設定で
[Performance]->[User Agent Groups]から、[hige]と[low]というユーザーエージェントグループが設定されているので、Enabledをチェックして有効にすると、ユーザーエージェントグループに設定されているユーザーエージェントからのアクセスの場合、キャッシュを表示しないようになります。

User_Agent_Groups___W3_Total_Cache_‹_suusuke_-_blog_—_WordPress

User_Agent_Groups___W3_Total_Cache_‹_suusuke_-_blog_—_WordPress 2