Mac OS X ファイル名の濁点を変換 (PHP)

OSによってファイル名の正規化が行われる.

UAX15-NormFig3

Unicode正規化 - Wikipedia

Linux / Windows
NFC: Normalization Form Canonical Compression

OS X
NFD: Normalization Form Canonical Decompression

異なる「正規化」間で問題となる.

PHPで認識して変換できるのか.

ファイルを OSX上でつくる.

$ ls
KONBU.txt        こんふ.txt       こんぶ.txt

これに対してPHPコード.

<?php
$files = glob('*.txt');
foreach ($files as $key => $file) {
    $raw = pathinfo($file, PATHINFO_FILENAME);
    $nfc_iconv = iconv('UTF-8-MAC', 'UTF-8', $raw);
  //$nfc_normalizer = Normalizer::normalize($raw, Normalizer::FORM_C);
    echo $raw                                  . "\t" .
         mb_strlen($raw, 'UTF-8')              . "\t" . 
       //mb_strlen($raw, 'UTF-8-MAC')          . "\t" . 
         iconv_strlen($raw, 'UTF-8-MAC')       . "\t" .
         urlencode($raw)                       . "\n";
    echo $nfc_iconv                            . "\t" .
         mb_strlen($nfc_iconv, 'UTF-8')        . "\t" . 
         iconv_strlen($nfc_iconv, 'UTF-8-MAC') . "\t" .
         urlencode($nfc_iconv)                 . "\n";
  //echo $nfc_normalizer                       . "\n";
}

実行.

$ php test.php 
KONBU	5	5	KONBU
KONBU	5	5	KONBU
こんふ	3	3	%E3%81%93%E3%82%93%E3%81%B5
こんふ	3	3	%E3%81%93%E3%82%93%E3%81%B5
こんぶ	4	3	%E3%81%93%E3%82%93%E3%81%B5%E3%82%99
こんぶ	3	3	%E3%81%93%E3%82%93%E3%81%B6

よって, NFDからNFCに変換する場合.

iconv('UTF-8-MAC', 'UTF-8', $raw)

PHP関数 iconv*( ) は「UTF-8-MAC」を知っている.


Mac の 空き容量 がない場合

どこから消したらいいのか.

DaisyDisk_-_Analyze_disk_usage_and_free_up_disk_space_on_Mac

良いアプリないかな, といつも探すが結局いつもこれ.

$ sudo du -g -x -d 5 / | awk '$1 >= 5{print}'
14	/Applications
7	/Library
9	/private/var
9	/private
6	/System/Library/Caches/com.apple.coresymbolicationd
6	/System/Library/Caches
11	/System/Library
11	/System
...

パスワードを要求されるので、ログイン時に使用しているパスワードを入力する。パスワードは入力しても画面には何も表示されないので気にせず入力した後returnキーを押して実行すること。正しく実行されると、ルートから5階層下までのフォルダの容量を確認し、容量が5GB以上のフォルダがリストアップされる (出力結果の数字は各フォルダの容量 (単位:GB))。すべてがリストアップされるのには時間がかかるので、プロンプト (例:username-no-macbook:~ username$) が出て次のコマンドが入力できる状態になるまで待つこと。

いっしょに紹介されてるフリーウェアもいい.

ハードディスクの空き容量が極端に少なくなる場合の対処方法 | Apple サポートコミュニティ


Docker コンテナと Mac OSX で ファイルを共有する

コンテナ内のディレクトリ /root を ホストのディレクトリ /tmp にマウントする.

docker run -v /tmp:/root myImage

dotcloud - Mounting directory from parent system to container in docker - Stack Overflow

コンテナ内から見えない...

This definitely does not work on OSX using boot2docker.

Mac OSX ではできない?

Docker を boot2docker で使う場合,

ファイルシステムでいうところの

コンテナとホストの間に dockerサーバ が存在する.

はじめてのDocker_on_Mac_OS_X_|_Developers_IO

はじめてのDocker on Mac OS X | Developers.IO

なので, 共有が2段階になっている.

docker_share_osx

以下の方法を試す.

How to share folders with docker containers on OSX

1. OSX と dockerサーバ(VM) 間の共有

sshfs-fuse を使う.

Filesystem in Userspace - Browse /sshfs-fuse at SourceForge.net

まず, OSX のリモートログイン機能を開始する.

System_Preferences

Sharing

Docker サーバに入って OSXのユーザディレクトリをマウントする.

$username と $ipadress は, OSX設定で許可した それぞれ.

$ boot2docker ssh
docker@boot2docker:~$ tce-load -wi sshfs-fuse
docker@boot2docker:~$ mkdir ~/osx
docker@boot2docker:~$ sudo sshfs $username@$ipaddress:/Users/$username/ /home/docker/osx/

2. dockerサーバ(VM) とコンテナ間の共有

通常の docker オプション -v による共有しながらのイメージ起動.

$ docker run -it -v /home/docker/osx/somefolder:/opt/somefolder ubuntu bash

これで,
コンテナ内 /opt/somefolder が
OSX の /Users/$username/somefolder と
共有されている.

追記:

とかいう話もバージョンアップで解消された.

docker 1.3 で MacOSX でもフツーに共有できようになった