読者です 読者をやめる 読者になる 読者になる

clock-up-blog

go-mi-tech

ファイル名文字コード SJIS -> UTF-8 変換スクリプト

Linux Shell

概要

SJISファイル名をUTF-8ファイル名に変更するスクリプト。

事例(どういうときに使うの?)

Windowsからファイル名文字コード変換せずにLinuxにファイルアップロードしちゃったりとか、
Windowsで作ったzipをLinuxで解凍したときとか、
そんなときにLinuxシステム上でSJISファイル名が登場しちゃうわけです。
それをUTF-8ファイル名に直すためのスクリプト。

類似

もっと汎用的なものとして convmv とかあったけど
あれはあれ、これはこれ。

以下コマンドで同じようなことできました。(作りきってから気づいた)

$ convmv -f sjis -t utf8 *

インストール

# mkdir /usr/scripts
# cd /usr/scripts
# git clone git@github.com:kobake/scripts.git .
# vi /etc/bashrc
export PATH=$PATH:/usr/scripts (追記)

動作例

[kobake@server tmp] $ ls -l
total 4
-rw-rw-r-- 1 kobake kobake 278 Oct  1  2010 ?h???C??.txt
-rw-rw-r-- 1 kobake kobake   0 Jun 11 12:19 ????.txt
-rw-rw-r-- 1 kobake kobake   0 Jun 11 12:19 ?ق??ق?.txt

[kobake@server tmp] $ rename_to_utf8 
Rename: .txt -> ほげほげ.txt
y or n> y
ok.
Rename: .txt -> ドメイン.txt
y or n> n
skip.
Rename: .txt -> 漢字.txt
y or n> y
ok.
----
ok count:2
error count:0
skip count:1

[kobake@server tmp]$ ls -l
total 4
-rw-rw-r-- 1 kobake kobake 278 Oct  1  2010 ?h???C??.txt
-rw-rw-r-- 1 kobake kobake   0 Jun 11 12:19 ほげほげ.txt
-rw-rw-r-- 1 kobake kobake   0 Jun 11 12:19 漢字.txt

ソースコード

#!/usr/bin/php
<?php
/*
	Usage: rename_to_utf8
	Requires: php 5.x
*/
$ok = 0;
$ng = 0;
$skip = 0;
$dir = opendir('.');
while($file = readdir($dir)){
	if($file[0] === '.')continue;
	$utf8_file = mb_convert_encoding($file, 'utf8', 'utf8,sjis');
	if($file !== $utf8_file){
		print "Rename: $file -> $utf8_file\n";
		while(1){
			$input = readline("y or n> ");
			$input = strtolower($input);
			if($input === 'y'){
				$b = rename($file, $utf8_file);
				if($b){
					$ok++;
					print "ok.\n";
				}
				else{
					$ng++;
					print "error.\n";
				}
				break;
			}
			elseif($input === 'n'){
				$skip++;
				break;
			}
			else{
				continue;
			}
		}
	}
}
closedir($dir);
print "----\n";
print "ok count:$ok\n";
print "error count:$ng\n";
print "skip count:$skip\n";
?>
});