批量提取文件

需求背景:应客户要求,要提取去年几个月的通话录音。由于是7* 24的业务,电话录音非常多,历史的录音记录每小时备份一次,用tar包的形式进行备份。录音记录存放的路径是:年//小时/录音文件

 如:

2011/01/00/*.wav

2011/01/01/*.wav

2011/01/23/*.wav

这样每个月有28 31 天,每天有24小时,每小时有n个录音文件。

  假设每小时平均有800个电话。

  1天的电话数量是:24 * 800 = 19200

  1月的电话数量按平均30天计算: 24 *800 *30 =576000

  1 季度的电话数量: 24×800×30×3 =1728000

  每个录音文件又对应一个描述的xml文件,则一季度录音文件数量和xml文件数量共计

24×800×30×3×2=3456000

 

要从约340万个文件中提取指定的3万个通话的音频文件,该如何进行呢?

接到这个需求已经是快下班的时间了,要求在第二天必完成所有工作,提交客户。

 

思路如下:

  先将所有的tar包中的文件解压出来,跟具提供的文件名去拷贝相关的问题件。

  由于tar包非常多,先写了个脚本去批量解压所有tar包中的文件。解压后删除原有

  tar,释放空间。

 

  脚本如下:

 

@echo off

title unzip01

for /r . %%a in (*.tar) do (

cd "%%~pa"

WinRAR e "%%a" 

del "%%a" )

如果安装了winrar,但提示找不到这个命令,可以把winrar的安装路径添加到环境变量path里。

为了提高速度,复制了几个脚本分别放在不同的目录下,同时进行解压。然后就下班了。

 

第二天文件都解压出来了,分别放在不同的目录下,且数量很大。怎么根据文件名查找相关的文件呢?如果能知道需要的文件的具体位置,直接用命令去复制就可以了。问题就转化为

如何获取需要文件的路径了。

 

1.       获取所有文件的路径

2.       把所有文件的路径存入到数据库的表中

3.       把需要的文件名存入表中

4.       根据文件路径表和文件名表进行关联查询,查找出需要提取的文件路径。

5.       写脚本拷贝指定路径名的文件。

 

   实现方法:

1.  Windows中用dir命令获取文件路径

    dir /s/b > filepath.txt

 

2.  建表存放文件路径

a) CREATE TABLE  tpath(fpath VARCHAR2(100) );

b) 用sql Loader把filepath.txt中的内容插入到tpath表中。

sqlldr user/password control=input02.ctl  errors=10 rows=1000  bindsize=33554432

 

3. 建表存需要的文件名

a) CREATE TABLE  tname (fname VARCHAR2(20) );

b) 把需要提取的文件名插入到tname表中。

 

4. 连表查询出需要提取的文件路径

 

SELECT 'copy ' || A.FPATH || ' d:\wav_bak', FPATH CMD

FROM TPATH A, TNAME N

WHERE SUBSTR(FPATH, 44, 15) = N.FNAME

Substr中的参数要根据,文件存放路径与文件名的匹配情况进行调整。

 

5.  将第4步的查询结果,保存到bat文件中,进行文件拷贝。

 

注:第一步和第五步可以让多个命令或批处理同时运行,以提高效率。

 

其实后来想想,可以不解压文件。直接获取tar包中的文件名,得到文件在tar中的路

径,也可以。这样在提取文件的时候,要进行解压操作。没有对比过直接从指定的路径

拷贝文件快还是从tar中提取指定的文件快。这个有待验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值