【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条

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

脚本位置生成:


目标位置 文件生成:

/home/sxnhtc/script/performance/current_menu/


find . -type d | wc -l # 统计子目录数量

find . -type f | wc -l # 统计文件数量

find .:在当前目录及其子目录中查找。

-type d:指定查找的类型为目录。

-type f:指定查找的类型为普通文件。

|:管道命令,将前一个命令的输出作为下一个命令的输入。

wc -l:统计行数,这里每个目录或文件占一行

至此,结束。 ok


项目管理--相关知识

项目管理-项目绩效域1/2-CSDN博客

项目管理-项目绩效域1/2_八大绩效域和十大管理有什么联系-CSDN博客

项目管理-项目绩效域2/2_绩效域 团不策划-CSDN博客

高项-案例分析万能答案(作业分享)-CSDN博客

项目管理-计算题公式【复习】_项目管理进度计算题公式:乐观-CSDN博客

项目管理-配置管理与变更-CSDN博客

项目管理-项目管理科学基础-CSDN博客

项目管理-高级项目管理-CSDN博客

项目管理-相关知识(组织通用治理、组织通用管理、法律法规与标准规范)-CSDN博客


Oracle其他文档,希望互相学习,共同进步

Oracle-找回误删的表数据(LogMiner 挖掘日志)_oracle日志挖掘恢复数据-CSDN博客

oracle 跟踪文件--审计日志_oracle审计日志-CSDN博客

ORA-12899报错,遇到数据表某字段长度奇怪现象:"Oracle字符型,长度50"但length查却没有50_varchar(50) oracle 超出截断-CSDN博客

EXP-00091: Exporting questionable statistics.解决方案-CSDN博客

Oracle 更换监听端口-CSDN博客

相关推荐
菜鸟康11 分钟前
Linux系统编程——系统内核中的信号
linux·运维·服务器
CSND7402 小时前
Ubuntu vi(vim)编辑器配置一键补全main函数
linux·c语言·ubuntu·编辑器·vim
运维&陈同学4 小时前
【Elasticsearch05】企业级日志分析系统ELK之集群工作原理
运维·开发语言·后端·python·elasticsearch·自动化·jenkins·哈希算法
シ風箏5 小时前
Neo4j【环境部署 02】图形数据库Neo4j在Linux系统ARM架构下的安装使用
linux·数据库·arm·neo4j
ZVAyIVqt0UFji7 小时前
go-zero负载均衡实现原理
运维·开发语言·后端·golang·负载均衡
Cachel wood7 小时前
Vue.js前端框架教程8:Vue消息提示ElMessage和ElMessageBox
linux·前端·javascript·vue.js·前端框架·ecmascript
小屁不止是运维9 小时前
麒麟操作系统服务架构保姆级教程(二)ssh远程连接
linux·运维·服务器·学习·架构·ssh
超爱吃士力架10 小时前
Ubuntu操作系统安装docker
linux·前端·后端
gavin_gxh11 小时前
SAP PP ECN CSAP_MAT_BOM_MAINTAIN
运维·经验分享·其他
黑客K-ing11 小时前
网络安全防范
linux·服务器·web安全