Windows 環境で作られたアーカイブファイルはたいがい zip で容赦なくファイル名が日本語 SJIS なわけです。そんな zip ファイルをFreeBSD の標準の/usr/bin/unzip で展開すると容赦なく文字化けして削除もままならないわけです。
ports から iconv 変換対応した unzip をインストールする
SJISなzipを展開するには、pkgではなくportsから iconv パッチが当たった unzip をインストールします。
portsのarchivers/unzip 標準のオプションではパッチが当たりません。pkgのバイナリはportsの標準オプションでビルドしてできているのでパッチは当たっていません。なので、pkgからではなくportsでオプションを変えてからインストールする必要があります。
make configでオプション指定
/usr/ports/archivers/unzip で make configを実行すると出てくる以下の画面で iconv のチェックをしてからmake install でインストールします。
インストール後、/usr/local/bin/unzip をオプション無しで実行すると、ヘルプが表示されます。
その中に以下の行が入っていれば、iconv パッチが当たっています。
$ /usr/local/bin/unzip
〜〜(略)〜〜
-O CHARSET specify a character encoding for DOS, Windows and OS/2 archives
-I CHARSET specify a character encoding for UNIX and other archives
-O オプションで文字コード指定
展開する場合は -Oオプションで cp932またはsjis-winを指定して
$ unzip -Ocp932 sjis.zip
とすれば、UTF-8なファイル名として展開されます。
alias などに登録
普通に unzip コマンドを打つと、/usr/bin/unzip が使われるので、/usr/local/bin/unzip -Ocp932 をシェルのalias に登録しておくといいでしょう。
alias unzip '/usr/local/bin/unzip -Ocp932'
alias unzip='/usr/local/bin/unzip -Ocp932'
#pkgのアップグレードに注意
configをいじったports全般で起きる問題ですが、pkgがアップグレードを検知すると、pkgが勝手にアップグレードを実行し、パッチの当たってない pkg バイナリ版に置き換わってしまいます。
# pkg lock unzip
でロックすることで、勝手に置き換わらないように出来ますが、バージョンアップは自分で検知して、手動で行う必要があります。