mysql dump で作成したファイルの分割

データベースごとに分離する

reg="/^CREATE DATABASE .*\`[a-zA-Z0-9_]*\`.*/"
csplit -z -f mysqldump_ -k mysqldump.dump "$reg" {*}

mysqldump.dump:元のダンプファイル

mysqldump_00:コメントのみ

mysqldump_01~:各種データベース毎のファイル

ファイルにデータベースの名前を設定する

for file in $(ls -1 mysqldump_* )
do
fname=mysqldump
mv -v $file "${fname}_$(grep 'USE `' $file | sed -e 's@.*`\(.*\)`;@\1@ig')" 
done

テーブルごとに分離する

for fname in $(ls mysqldump_*)
do
csplit -z -f ${fname}_ -k ${fname} "/^CREATE TABLE \`[a-zA-Z0-9_]*\`/" {*}
done

ファイルにテーブルの名前を設定する

for file in $(ls -1 mysqldump_*_* ); 
do 
table_name=$(grep "CREATE TABLE" $file | cut -d '`' -f 2); 
mv ${file} ${table_name}.sql; 
done;
for file in $(ls -1 mysqldump_*_* )
do 
# mv
fname=$( echo $file | sed -e "s@\(mysqldump_.*\)_[^_]*@\1@ig" );
mv -v $file "${fname}_$(grep 'CREATE TABLE `' $file | sed -e 's@.*`\(.*\)`.*@\1@ig')" ; 
# done
done

CREATE と INSERT を分離

for file in $(ls mysqldump_*_*)
do
csplit -z -f ${file}_ -k ${file} "/^LOCK TABLES/" {2}
done