本文已参与「新人创作礼」活动,一起开启掘金创作之路
本文已参与「新人创作礼」活动,一起开启掘金创作之路
本文已参与「新人创作礼」活动,一起开启掘金创作之路
本文已参与「新人创作礼」活动,一起开启掘金创作之路
本文已参与「新人创作礼」活动,一起开启掘金创作之路
1.首先把你写好的十个sql全部保存在桌面,一个sql一个文件,然后把十个sql都放在一个文件夹并且打压缩包
压缩包建议:zip格式的,不要问为什么不要rar格式
2.然后打开虚拟机,将物理机上的压缩包上传到Linux中
方法一:
在物理机cmd命令行中进行输入命令
scp 物理机文件的位置路径 虚拟机的用户名@虚拟机的地址:上传后你要放在虚拟机的位置
如上图所使,即为上传成功了
方法二:
神器!SecureCRTPortable
(其实我一开始就有这个,但是我懒得打开,但是由于后面太墨迹了,最后还是选择了打开)
所以你们直接使用方法二把,是真的省事,方法一知道就行了
(由于虚拟机关了,下面就不截图了,文字也可以看懂)
3.上传到虚拟机后,在终端进行解压,解压zip命令
unzip 文件名
4.解压完成以后,由于win下的文件到Linux下会出现中文乱码的情况,所以这里有个方法就是使用dos2unix进行转换
但是在使用之前需要安装dos2unix,安装命令推荐使用:
yum install -y dos2unix
5.安装完成以后就可以进行转换了,在需要转换的文件目录下,将其所有文件进行转换,命令如下:(当然你也可以指定文件转换)
dos2unix *
这个命令是将win下的CRLF转换成Linux下的LF
win下的:windows的换行符是CRLF,也就是\r\n
Linux下的:但是unix的换行符是LF,也就是\n
转字符集的话应该用iconv,一次性转换多个,写个shell循环把,哈哈
6.然后进行添加注释的命令
#===================================添加文件名============================================================
# 每个文件第一行添加文件名
# 我合并文件前一般希望每个文件前加一个注释 如 --文件名.sql
# 这里用到了 xargs -I {}的技巧 另之所以\$0 要加\是为了转义,否则$0表示的不是awk中的$0
rm -rf ../tmp-addfilename
mkdir -p ../tmp-addfilename
ls *.sql |xargs -t -I {} sh -c "awk '{if(NR==1) print \"-- \"FILENAME; print \$0}' {} > ../tmp-addfilename/{}"
# 如果有文件中既有sql文件,又有存储过程文件.prc 则用如下的命令
ls |xargs -t -I {} sh -c "awk '{if(NR==1) print \"-- \"FILENAME; print \$0}' {} > ../tmp-addfilename/{}"
7.多个sql合并的命令
#========================================合并===========================================================
# 用xargs方式 如下-t 用来输出命令
# 注 20171117 测试时发现 如果用zsh 则导出的sql文件不能放在当前目录中,否则会一直导致死循环 其把导出的sql文件又重定向到自己了,但在bash中是没有问题的,所以为了保险把文件重定向到另一个目录中
find ../tmp-addfilename -name "*.sql" |xargs -t cat >../20220111.sql
扩展:
`-iso` will convert from default code page into Unix Latin-1
`-iso`将从默认代码页转换为Unix Latin-1
`-850` will convert from DOS CP850 to Unix Latin-1
`-850`将从DOS CP850转换为Unix Latin-1
`-1252` will convert from Windows CP1252 to Unix UTF-8 or Unicode
-1252将从Windows CP1252转换为Unix UTF-8或Unicode