home wiki.fukuchiharuki.me
Menu

関連

  • シェル
  • MySQL

概要

テストでデータをこちょこちょ触るのが面倒だったので作りました。

要件は以下。

  • データはtsvファイル
  • 該当テーブルのレコードを全削除してデータをロードする

制限事項は以下。

  • データはひとつのディレクトリにまとめて置く
  • データのファイル名は「*.dat」

スクリプト

  • reset.sh
#!/bin/sh

directory=`./abstpath.sh $1`
if [ ! -d ${directory} ]
then
    echo "the directory does not exist."
    exit
fi

files=`find ${directory} -maxdepth 1 -name "*.dat"`
for file in ${files}
do
    table=`basename ${file} .dat`
    mysql -u<ユーザ> -p<パスワード> <データベース> -e "DELETE FROM ${table};"
    mysql -u<ユーザ> -p<パスワード> <データベース> -e "LOAD DATA LOCAL INFILE '${file}' INTO  TABLE ${table} FIELDS TERMINATED BY '\t';"
    echo "${table} < ${file}"
done
  • abstpath.sh
#!/bin/sh

echo $(cd $(dirname $0) && pwd)/$1

操作手順

┣ reset.sh
┗ data/
  ┣ hoge.dat
  ┗ moge.dat

こんなディレクトリ構成になっているとして、

$ ./reset.sh data/

こうするとわーっとなります。

参考