bash script でwripeバックアップファイルの変換処理を書いた
主な内容 bash script Ubuntu 14.04で確認 UTF8,LF変換にnkf のインストールが必要 ファイル変換内容 1行目(wripeタイトル)から、ファイル名決定 ファイル名に使用できる文字列変換 wripeタイトルに日付が入っていた場合の処理をある程度考慮 1行目は削除 UTF8,LF変換 tag 空白4文字変換 起動引数 第一引数:バックアップファイルの保存先 疲れた….
#!/bin/bash DIR_IN=$1 OUT_NAME=out DIR_OUT=$DIR_IN/$OUT_NAME which nkf 1>/dev/null 2>/dev/null RC=$? if [ $RC -ne 0 ]; then echo "nkf not installed!" return fi if [ "" == "$1" ]; then echo "arg1(input directory) is blank!" return fi if [ -d $DIR_IN ]; then # specified directory is exist. if [ -e $DIR_OUT ]; then # out dir is exist. echo "out dir $DIR_OUT exist! ok!" if [ -f $DIR_OUT ]; then # file echo "out dir $DIR_OUT is file..." return fi else # out dir is not exist. echo "make $DIR_OUT directory!" mkdir -p $DIR_OUT fi else echo "$DIR_IN is not exist or file!" return fi err_files="" for f in `find $1 -type d -name "$OUT_NAME" -prune -o -type f -name "*.txt" -o -name "*.md" -print` do # ファイルの1行目をline変数へ格納 line=`head -n 1 "$f"` # echo ${line} # => 「YYYY/M/D タイトル」形式 # 最初に出てくるドット、またはスペースを区切りに後ろを削除 dt=`echo ${line} |sed -E "s/[\.| ].+//g"` if [[ "$dt" =~ ^[0-9]{8}$ ]]; then # "YYYYMMDD ","YYYYMMDD." に一致 # ~は正規表現を使用するの意味 # echo "matched" ymd="$dt" elif [[ "$dt" =~ ^[0-9]{4}\/[0-9]{1,2}\/[0-9]{1,2}$ ]]; then # "YYYY/M/D ","YYYY/M/D." に一致 # echo "matched date" # 日付取り出し&ゼロパディング yyyy=`echo ${dt} |sed -E "s|^([0-9]+)/([0-9]+)/([0-9]+)|\1|g"` mm=`echo ${dt} |sed -E "s|^([0-9]+)/([0-9]+)/([0-9]+)|\2|g"` if [[ ! "$mm" =~ ^0[0-9]$ ]]; then mm=`printf "%02d" $mm` fi dd=`echo ${dt} |sed -E "s|^([0-9]+)/([0-9]+)/([0-9]+)|\3|g"` if [[ ! "$dd" =~ ^0[0-9]$ ]]; then dd=`printf "%02d" $dd` fi ymd="$yyyy$mm$dd" else echo "[Error] Unknown date format! file=$f dt=$dt" err_files="${err_files}${f}\n" continue fi # ファイルの1行目からタイトルのみ取り出し # name=`echo ${line} |sed -E "s|^[0-9]+/[0-9]+/[0-9]+ +||g"` name=`echo ${line} |sed -E "s|^$dt[\.| ]+||g"` echo "$f => ${name}" # 特殊文字列置換 # echo $name # name=`echo $name |sed -E "s| |_|g"` name=`echo $name |sed -E "s|\(|(|g"` name=`echo $name |sed -E "s|\)|)|g"` # ファイルコピー&変換 newfilename="$ymd.$name.md" # echo $newfilename newfilepath=$DIR_OUT/$newfilename if [ -e "$newfilepath" ]; then # 同一ファイルが存在した場合 echo "[Error] File Already Exist! file=$f" err_files="${err_files}${f}\n" continue fi echo "copy and convert file! $f => \"$newfilepath\"" # file copy. cp "$f" "$newfilepath" # LF UTF8 convert. # echo "convert file LF!UTF8! $newfilepath" nkf -wLu --overwrite "$newfilepath" # head one line delete!. # echo "head one line delete! $newfilepath" sed -e '1,1d' "$newfilepath" > "$newfilepath.tmp.md" # tab space convert. # echo "convert file tab to space! $newfilepath" sed -e "s/\t/ /g" "$newfilepath.tmp.md" > "$newfilepath" # tmp file delete rm "$newfilepath.tmp.md" done if [ ! "$err_files" == "" ]; then echo "-------------------------------" echo "Error file is Exist!" echo "" printf "$err_files" echo "" echo "-------------------------------" else echo "" echo "success!" echo "" fi