そんなときの強い味方、Network Kanji Filter : nkfであるが、複数のファイルを一度に変換するにはいちいち面倒くさい。
どうせならフォルダ内の対応したファイルを全て変換したいっ!
そんな煩わしさを解消するシェルスクリプトを書いてみた。
ソースは続きから。
「あるディレクトリのC++ファイル(.*\.hや.*\.cpp)を全てunicodeに変換したい!」場合の使い方は以下。
オプション-dでディレクトリ指定を。-rで元のファイルの削除を。-w/-sでutf-8/sjisの変換を行う。
もちろん単一ファイルも対応可能で、その際は-dオプションを外せばよい。
.*\.h、.*\.cpp、.*\.txtファイルを対象としているが、適宜ソースを編集すればOK。
そんな煩わしさを解消するシェルスクリプトを書いてみた。
ソースは続きから。
「あるディレクトリのC++ファイル(.*\.hや.*\.cpp)を全てunicodeに変換したい!」場合の使い方は以下。
nkf.sh -w -d -r ディレクトリ名
オプション-dでディレクトリ指定を。-rで元のファイルの削除を。-w/-sでutf-8/sjisの変換を行う。
もちろん単一ファイルも対応可能で、その際は-dオプションを外せばよい。
nkf.sh -w -r ファイル名
.*\.h、.*\.cpp、.*\.txtファイルを対象としているが、適宜ソースを編集すればOK。
nkfのオプションも適宜編集のこと。
ソースはこんな感じ。もっと短く書けるだろうなぁ。
ソースはこんな感じ。もっと短く書けるだろうなぁ。
#!/bin/sh
#extended nkf
#Author:Takaaki
#Last update:09/05/20
is_rm=0 # whether remove original files or not defalt:false
is_dir=0 # whether $1 is a directory or not defalt:false
nkf_opt="" # format for nkf
while getopts "rdsw" opt; do
case $opt in
r ) is_rm=1 ;;
d ) is_dir=1 ;;
s ) nkf_opt="-s" ;;
w ) nkf_opt="-w" ;;
\? ) echo 'usage: nkf -format [-r] [-d] args'
exit 1
esac
done
shift $(($OPTIND - 1))
if [ $nkf_opt = ""];then
echo 'usage: -format must be given (-w / -s)'
exit 1
fi
if [ $is_dir = 1 ];then
for file in $(ls $1);do
ext=`echo $file | sed -e "s/.*\.\([^\.]*\)\$/\1/g"`
if [ "$ext" = "cpp" -o "$ext" = "h" -o "$ext" = "txt" ];then
if [ $is_rm = 1 ];then
nkf $nkf_opt $1/$file > $1/$file~
mv $1/$file~ $1/$file
else
filename=`echo $file | sed -e "s/\.$ext//g"`
nkf $nkf_opt $1/$file > $1/$filename~.$ext
fi
fi
done
else
ext=`echo $1 | sed -e "s/.*\.\([^\.]*\)\$/\1/g"`
if [ "$ext" = "cpp" -o "$ext" = "h" -o "$ext" = "txt" ];then
if [ $is_rm = 1 ];then
nkf $nkf_opt $1 > $1~
mv $1~ $1
else
filename=`echo $1 | sed -e "s/\.$ext//g"`
nkf $nkf_opt $1 > $filename~.$ext
fi
fi
fi
#Author:Takaaki
#Last update:09/05/20
is_rm=0 # whether remove original files or not defalt:false
is_dir=0 # whether $1 is a directory or not defalt:false
nkf_opt="" # format for nkf
while getopts "rdsw" opt; do
case $opt in
r ) is_rm=1 ;;
d ) is_dir=1 ;;
s ) nkf_opt="-s" ;;
w ) nkf_opt="-w" ;;
\? ) echo 'usage: nkf -format [-r] [-d] args'
exit 1
esac
done
shift $(($OPTIND - 1))
if [ $nkf_opt = ""];then
echo 'usage: -format must be given (-w / -s)'
exit 1
fi
if [ $is_dir = 1 ];then
for file in $(ls $1);do
ext=`echo $file | sed -e "s/.*\.\([^\.]*\)\$/\1/g"`
if [ "$ext" = "cpp" -o "$ext" = "h" -o "$ext" = "txt" ];then
if [ $is_rm = 1 ];then
nkf $nkf_opt $1/$file > $1/$file~
mv $1/$file~ $1/$file
else
filename=`echo $file | sed -e "s/\.$ext//g"`
nkf $nkf_opt $1/$file > $1/$filename~.$ext
fi
fi
done
else
ext=`echo $1 | sed -e "s/.*\.\([^\.]*\)\$/\1/g"`
if [ "$ext" = "cpp" -o "$ext" = "h" -o "$ext" = "txt" ];then
if [ $is_rm = 1 ];then
nkf $nkf_opt $1 > $1~
mv $1~ $1
else
filename=`echo $1 | sed -e "s/\.$ext//g"`
nkf $nkf_opt $1 > $filename~.$ext
fi
fi
fi
0 件のコメント:
コメントを投稿