【Linux】按时间抽取附件

#1024程序员节|征文#


希望互相学习,共同进步

风123456789~-CSDN博客

1.背景

附件表 t_file 中有创建时间,需求是抽取202407-202408 月创建的附件到指定目录,并保持层级目录。

解决方案:由于抽取的附件条数比较多,采用:SQL查询+生成附件清单+cp脚本的方式。

2.实验:脚本抽取

思路:通过sql将文件目录清单 抽取到指定文件中,然后用cp命令脚本执行。

脚本:extract_file_feng.sh (生成cp脚本+移动附件到 current_menu)

extract_table_name.txt 存放要执行的sql文件名,可以多个

sql_model :存放待查询的sql文件

ok_file : 存放生成的cp 脚本文件

current_menu :存放抽取的附件结果

1)指定sql

sxnhtc@appx-container performance\]$ cat extract_table_name.txt cloud_xpt_202407to08 \[sxnhtc@appx-container performance\]$ #### 2)sql_model 写入sql 准备sql ```sql select 'cp -r '||FOLDER||'/'||NEW_FILE_NAME ||' /home/sxnhtc/script/performance/current_menu'||FOLDER||'/' aa from t_file t where to_char(T.created,'yyyy-mm') BETWEEN '2024-07' AND '2024-08' and t.bank_code ='014001007'; ``` 截图:共44条 ![](https://i-blog.csdnimg.cn/direct/d99d62f4530b4ecb8bc578935213b067.png) vim ./sql_model/cloud_xpt_202407to08.sql ```sql 将sql写入cloud_xpt_202407to08.sql [sxnhtc@appx-container performance]$ cd ./sql_model/ [sxnhtc@appx-container sql_model]$ vim cloud_xpt_202407to08.sql [sxnhtc@appx-container sql_model]$ cat cloud_xpt_202407to08.sql FLAG=CLOUD sql="select 'cp -r '||FOLDER||'/'||NEW_FILE_NAME ||' /home/sxnhtc/script/performance/current_menu'||FOLDER||'/' aa from t_file t where to_char(T.created,'yyyy-mm') BETWEEN '2024-07' AND '2024-08' and t.bank_code ='014001007';" [sxnhtc@appx-container sql_model]$ ``` #### 3)ok_file 中模版文件 ```sql [sxnhtc@appx-container performance]$ cd /home/sxnhtc/script/performance/ok_file/ [sxnhtc@appx-container ok_file]$ ll 总用量 4 -rw-rw-r-- 1 sxnhtc sxnhtc 15 10月 19 13:51 templet.sh [sxnhtc@appx-container ok_file]$ [sxnhtc@appx-container ok_file]$ cat templet.sh #! /bin/bash [sxnhtc@appx-container ok_file]$ ``` #### 4)脚本文件 .sh vim extract_file_feng.sh ```bash [sxnhtc@appx-container performance]$ cat extract_file_feng.sh #!/bin/bash #Date: 2024年 10月 19日 星期六 12:09:40 CST #Description: 连接数据库查询所需拷贝文件清单,并根据清单抽取文件到指定目录下 #Description: /home/sxnhtc/script/performance/current_menu/ #Version:1.0 source ~/.bash_profile startTime=`date +%Y%m%d-%H:%M:%S` startTime_s=`date +%s` #Oracle 数据库 IP 地址 IP="192.168.3.16" #Oracle数据库 SID SID="orclpdb1" #配置文件目录 CONFIG_FILE="/home/sxnhtc/script/performance" #导出表清单名单 ExpTableName="${CONFIG_FILE}/extract_table_name.txt" #导出 sql 文件存放位置 SqlFilePath="${CONFIG_FILE}/sql_model" #导出 结果清单 文件存放位置 OKFileResult="${CONFIG_FILE}/ok_file" #日期批次 服务器当前时间 减 一个月 #DateBatch=`date --date="1 month ago" '+%Y%m%d'` DateBatch=${1} if [ "$#" -ne 1 ]; then echo "请传入日期参数,参数格式为: 20240810" exit 1 fi echo ${DateBatch} #2020 YEAR=${DateBatch:0:4} #08 MONTH=${DateBatch:4:2} #01 DAY=${DateBatch:6:2} DAYDATA=${YEAR}-${MONTH}-${DAY} #抽取数据表清单生成位置 OKFile="${CONFIG_FILE}/${DateBatch}" #判断文件是否存在,不存在就创建 if [ ! -d ${OKFile} ];then echo -e "创建 表清单生成的位置\n" `/usr/bin/mkdir -p ${OKFile}` else cd /tmp/ rm -rf ${OKFile}/* fi #抽取文件到临时位置 OutPutFileTemp="/home/sxnhtc/script/performance/current_menu/" if [ ! -d ${OutPutFileTemp} ];then echo -e "创建所需文件拷贝的current_menu目录位置\n" `/usr/bin/mkdir -p ${OutPutFile}` fi OutPutFile="${CONFIG_FILE}/${YEAR}-${MONTH}" # 生成的 压缩文件,需要拷贝的位置 #OutZip="/backup/performance/extract_file/tmp/${DAYDATA}" if [ ! -d ${OutPutFile} ];then echo -e "创建所需文件拷贝的目录位置\n" `/usr/bin/mkdir -p ${OutPutFile}` else cd /tmp/ ` rm -rf ${OutPutFile} ` `/usr/bin/mkdir -p ${OutPutFile}` fi echo -e "开始连Oracle数据库导出清单\n" #遍历需要导出的表清单名单 for TableName in `cat ${ExpTableName}` do #进入到生成数据文本目录 cd ${OKFile}/ #删除旧数据,防止数据重复 rm -rf ${TableName}.ok #提取相关变量 #source "${SqlFilePath}/${TableName}.sql" source "/home/sxnhtc/script/performance/sql_model/cloud_xpt_202407to08.sql" #判断所属用户 UPD="nh_mcro_cloud/xxx@${IP}/${SID}" YM=${YEAR}-${MONTH} #替换指定字符串 SqlNew=${sql//SXNHTC/${YM}} echo ${SqlNew} #执行导出 sqluldr2 ${UPD} query="${SqlNew}" field="0x1b" charset=UTF8 safe=yes file=${OKFile}/${TableName}.ok done echo -e "清单导出完毕\n" #echo -e "根据清单拷贝文件\n" #passwd='xxx' #根据表清单,开始抽取文件到指定位置 #for FileName in `cat ${OKFile}/${TableName}.ok` #do # 覆盖拷贝 #cp -f ${FileName} ${OutPutFile}/ #`/usr/bin/expect <<-EOF #set timeout -1 #spawn rsync -av szptmcro@xxx:${FileName} ${OutPutFile}/ #expect "*password:" #send "$passwd\r" #interact #expect eof #EOF` #done echo -e "生成拷贝脚本\n" cp -f ${OKFileResult}/templet.sh ${OKFileResult}/${TableName}.sh cat ${OKFile}/${TableName}.ok >> ${OKFileResult}/${TableName}.sh sh ${OKFileResult}/${TableName}.sh >>${OKFileResult}/${TableName}.log echo -e "文件拷贝完毕\n" cd ${OutPutFile}/ touch ${OutPutFile}/${DateBatch}.ok endTime=`date +%Y%m%d-%H:%M:%S` endTime_s=`date +%s` sumTime=$[ ${endTime_s} - ${startTime_s} ] echo "${startTime} ---> ${endTime}" "Total: ${sumTime} seconds" ``` #### 5)执行脚本 sh extract_file_feng.sh 20241019 ```bash [sxnhtc@appx-container performance]$ sh extract_file_feng.sh 20241019 20241019 开始连Oracle数据库导出清单 select 'cp -r '||FOLDER||'/'||NEW_FILE_NAME ||' /home/sxnhtc/script/performance/current_menu'||FOLDER||'/' aa from t_file t where to_char(T.created,'yyyy-mm') BETWEEN '2024-07' AND '2024-08' and t.bank_code ='014001007'; 0 rows exported at 2024-10-19 15:37:00, size 0 MB. 44 rows exported at 2024-10-19 15:37:00, size 0 MB. .ok closed at 44 rows, size 0 MB./script/performance//20241019/cloud_xpt_202407to08 清单导出完毕 生成拷贝脚本 文件拷贝完毕 20241019-15:36:58 ---> 20241019-15:37:00 Total: 2 seconds [sxnhtc@appx-container performance]$ ``` ## 3.生产移动 ok 改为生产要导出的sql: ```bash [sxnhtc@appx-container 20241019]$ cd /home/sxnhtc/script/performance/sql_model/ [sxnhtc@appx-container sql_model]$ cat cloud_xpt_202407to08.sql FLAG=CLOUD sql="select 'cp -r '||FOLDER||'/'||NEW_FILE_NAME ||' /home/sxnhtc/script/performance/current_menu'||FOLDER||'/' aa from t_file t where to_char(T.created,'yyyy-mm') BETWEEN '2024-07' AND '2024-08';" [sxnhtc@appx-container sql_model]$ ``` 执行:nohup sh extract_file_feng.sh 20241019 \>extract_file_feng.log \& ```sql [sxnhtc@appx-container performance]$ nohup sh extract_file_feng.sh 20241019 >extract_file_feng.log & [1] 216429 [sxnhtc@appx-container performance]$ nohup: 忽略输入重定向错误到标准输出端 ^C [sxnhtc@appx-container performance]$ ps -ef |grep extract_file_feng.sh sxnhtc 216429 126005 0 16:28 pts/0 00:00:00 sh extract_file_feng.sh 20241019 sxnhtc 216648 126005 0 16:28 pts/0 00:00:00 grep --color=auto extract_file_feng.sh [sxnhtc@appx-container performance]$ [sxnhtc@appx-container performance]$ tail -200f extract_file_feng.log ``` 结果截图: ok ![](https://i-blog.csdnimg.cn/direct/4b07d17ace9043e4be2cdb92080556f6.png) > 脚本位置生成: > > ![](https://i-blog.csdnimg.cn/direct/0a621fc4c43e4a75a3a9b33927d0804a.png) > 目标位置 文件生成: > > /home/sxnhtc/script/performance/current_menu/ > > ![](https://i-blog.csdnimg.cn/direct/e2ba8385f30c45b9b6468f4c6040124e.png) > ![](https://i-blog.csdnimg.cn/direct/5b20f121d1a24120a7c334efd1c8f17b.png) > > find . -type d \| wc -l # 统计子目录数量 > > find . -type f \| wc -l # 统计文件数量 > > > find .:在当前目录及其子目录中查找。 > > -type d:指定查找的类型为目录。 > > -type f:指定查找的类型为普通文件。 > > \|:管道命令,将前一个命令的输出作为下一个命令的输入。 > > wc -l:统计行数,这里每个目录或文件占一行 至此,结束。 ok ![](https://i-blog.csdnimg.cn/direct/810925c5343547d3a6a490ec64b049e6.gif) *** ** * ** *** **项目管理--相关知识** ****![](https://i-blog.csdnimg.cn/direct/cd864bf52c2d4f50949cca236e432fc6.png)**** [项目管理-项目绩效域1/2-CSDN博客](https://blog.csdn.net/weixin_42081167/article/details/138522193 "项目管理-项目绩效域1/2-CSDN博客") [项目管理-项目绩效域1/2_八大绩效域和十大管理有什么联系-CSDN博客](https://blog.csdn.net/weixin_42081167/article/details/138522193 "项目管理-项目绩效域1/2_八大绩效域和十大管理有什么联系-CSDN博客") [项目管理-项目绩效域2/2_绩效域 团不策划-CSDN博客](https://blog.csdn.net/weixin_42081167/article/details/138546561?spm=1001.2014.3001.5502 "项目管理-项目绩效域2/2_绩效域 团不策划-CSDN博客") [高项-案例分析万能答案(作业分享)-CSDN博客](https://blog.csdn.net/weixin_42081167/article/details/138476621 "高项-案例分析万能答案(作业分享)-CSDN博客") [项目管理-计算题公式【复习】_项目管理进度计算题公式:乐观-CSDN博客](https://blog.csdn.net/weixin_42081167/article/details/138771667?spm=1001.2014.3001.5502 "项目管理-计算题公式【复习】_项目管理进度计算题公式:乐观-CSDN博客") [项目管理-配置管理与变更-CSDN博客](https://blog.csdn.net/weixin_42081167/article/details/138377594 "项目管理-配置管理与变更-CSDN博客") [项目管理-项目管理科学基础-CSDN博客](https://blog.csdn.net/weixin_42081167/article/details/138397680 "项目管理-项目管理科学基础-CSDN博客") [项目管理-高级项目管理-CSDN博客](https://blog.csdn.net/weixin_42081167/article/details/138382506 "项目管理-高级项目管理-CSDN博客") [项目管理-相关知识(组织通用治理、组织通用管理、法律法规与标准规范)-CSDN博客](https://blog.csdn.net/weixin_42081167/article/details/138401904 "项目管理-相关知识(组织通用治理、组织通用管理、法律法规与标准规范)-CSDN博客") *** ** * ** *** **Oracle其他文档,希望互相学习,**![](https://i-blog.csdnimg.cn/direct/cd864bf52c2d4f50949cca236e432fc6.png)**共同进步** [Oracle-找回误删的表数据(LogMiner 挖掘日志)_oracle日志挖掘恢复数据-CSDN博客](https://blog.csdn.net/weixin_42081167/article/details/135786998?spm=1001.2014.3001.5501 "Oracle-找回误删的表数据(LogMiner 挖掘日志)_oracle日志挖掘恢复数据-CSDN博客") [oracle 跟踪文件--审计日志_oracle审计日志-CSDN博客](https://blog.csdn.net/weixin_42081167/article/details/135007162?spm=1001.2014.3001.5501 "oracle 跟踪文件--审计日志_oracle审计日志-CSDN博客") [ORA-12899报错,遇到数据表某字段长度奇怪现象:"Oracle字符型,长度50"但length查却没有50_varchar(50) oracle 超出截断-CSDN博客](https://blog.csdn.net/weixin_42081167/article/details/136183543?spm=1001.2014.3001.5501 "ORA-12899报错,遇到数据表某字段长度奇怪现象:“Oracle字符型,长度50”但length查却没有50_varchar(50) oracle 超出截断-CSDN博客") [EXP-00091: Exporting questionable statistics.解决方案-CSDN博客](https://blog.csdn.net/weixin_42081167/article/details/138155352?spm=1001.2014.3001.5501 "EXP-00091: Exporting questionable statistics.解决方案-CSDN博客") [Oracle 更换监听端口-CSDN博客](https://blog.csdn.net/weixin_42081167/article/details/143042128?spm=1001.2014.3001.5501 "Oracle 更换监听端口-CSDN博客")

相关推荐
不想学习!!20 分钟前
linux之进程控制
java·linux·服务器
良许Linux21 分钟前
学电子信息工程时你遇到什么相见恨晚的网站和学习方法?
linux
良许Linux24 分钟前
一个人离职前有什么征兆?
linux
神经毒素28 分钟前
WEB安全--文件上传漏洞--36C3 CTF includer bypass
linux·安全·web安全
良许Linux34 分钟前
单片机、嵌入式的大神都平时浏览什么网站?
linux
kfepiza38 分钟前
`accept_ra` 和 `autoconf` 和 `forwarding` 的关系 笔记250404
linux·网络·笔记·tcp/ip·智能路由器·ip·tcp
DADIAN_GONG1 小时前
incomplete command on Huawei switch
linux·运维·华为
水星灭绝1 小时前
orangepi zero烧录及SSH联网
运维·ssh
Once_day1 小时前
Linux错误(6)X64向量指令访问地址未对齐引起SIGSEGV
linux·c++·sse·x64·sigsegv·xmm0
Tee xm1 小时前
清晰易懂的 Flutter 卸载和清理教程
linux·windows·flutter·macos