Skip to content

Instantly share code, notes, and snippets.

@aminophen
Last active January 21, 2016 12:48
Show Gist options
  • Save aminophen/cbe0bc563afc20dbaf2c to your computer and use it in GitHub Desktop.
Save aminophen/cbe0bc563afc20dbaf2c to your computer and use it in GitHub Desktop.
Convert encodings of all files in a directory
#!/bin/sh
walk(){
for path in $1/*; do
if [ -d "$path" ]; then
walk "$path"
elif [ -f "$path" ]; then
if [ ${path##*.} = "pdf" -o ${path##*.} = "tfm" -o ${path##*.} = "pfb" -o ${path##*.} = "vf" ]; then
echo "$path ignored."
else
iconv -f UTF-8 -t ISO-2022-JP "$path" >"$path.conv"
mv "$path.conv" "$path"
fi
fi
done
}
walk $1
@echo off
set FILEDIR=%~1
cd "%FILEDIR%"
dir /B /S /A-D >"%FILEDIR%\filelist.txt"
set FILELIST=%FILEDIR%\filelist.txt
for /F "usebackq delims=" %%a in ("%FILELIST%") do (
if "%%~xa"==".pdf" (echo "%%~a ignored.") else (
if "%%~xa"==".tfm" (echo "%%~a ignored.") else (
if "%%~xa"==".pfb" (echo "%%~a ignored.") else (
if "%%~xa"==".vf" (echo "%%~a ignored.") else (
nkf -Wj --overwrite "%%~a"
)
)
)
)
)
del %FILELIST%
#!/bin/sh
walk(){
for path in $1/*; do
if [ -d "$path" ]; then
walk "$path"
elif [ -f "$path" ]; then
if [ ${path##*.} = "pdf" -o ${path##*.} = "tfm" -o ${path##*.} = "pfb" -o ${path##*.} = "vf" ]; then
echo "$path ignored."
else
nkf -Wj --overwrite "$path"
fi
fi
done
}
walk $1
@aminophen
Copy link
Author

第一引数にディレクトリを指定すると、そのディレクトリおよびサブディレクトリのファイルを全てエンコーディング変換する。例示コードは ISO-2022-JP への変換(nkf -Wj および iconv -f UTF-8 -t ISO-2022-JP の部分;iconv には元ファイルのエンコード推定機能がないので指定必須であることに注意)。

  • 「バイナリファイルだけ除外」とすべきところを拡張子ではじいている点に注意(あまり筋が良くないので要改善;普段の自分用スクリプトは「.pdf だけ除外して UTF-8N に変換」としているのでその名残です)。
  • ディレクトリ指定として単に . とするのは NG。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment