linux tar指定文件到指定目录

时间:2022-10-26 19:49:02

项目需求:从远处拷贝压缩文件到本地后并解压,解压后的部分文件拷贝并重命名到其他目录

需求拆分:1.拷贝文件 2.解压文件 3.批量重命名

步骤一查看:http://www.cnblogs.com/ddddemo/p/5670534.html

步骤三查看:http://www.cnblogs.com/ddddemo/p/5729099.html

现在需要实现步骤二,解压文件。

第一种方案,tar zxvf $dir/XXX.tgz -C $targetDir/

这种会直接将文件解压到$targetDir目录下,因为要把XXX.tgz目录下的所有文件都解压,所以耗时最长

第二种方案,如果需要的部分文件含有一定的规律,可以使用* 或? 代表共同部分进行解压 或者 指出要解压的文件一一列出

tar zxvf $dir/XXX.tgz   AABBCCDD*EEFF  -C $targetDir/

其中 AABBCCDD*EEFF为指定要解压的文件,举例具体说明:

我有文件life_20160801_log.tgz

需要解压到dir=/data/ddddemo/log/ 目录下

其中tgz的完全解压后的目录结构如下:

life_20160801_log

  |--am

    |--relax_20160801_0001.log

    |--relax_20160801_0101.log

    |--relax_20160801_0201.log

    |--relax_20160801_0301.log

    |--relax_20160801_0401.log

    |--relax_20160801_0501.log

    |--relax_20160801_0601.log

    |--relax_20160801_0701.log

    |--work_20160801_0801.log

    |--work_20160801_0901.log

    |--work_20160801_1001.log

    |--work_20160801_1101.log

    |--work_20160801_1201.log

  |--pm

    |--work_20160801_1301.log

    |--work_20160801_1401.log

    |--work_20160801_1501.log

    |--work_20160801_1601.log

    |--work_20160801_1701.log

我们需要获取到 am下的work*日志

那么我们有两种实现方法

1.

tar -C $targetDir/ -zxvf $dir/life_20160801_log.tgz  life_20160801_log/am/work_20160801_*

2.

tar -C $targetDir/ -zxvf $dir/life_20160801_log.tgz  life_20160801_log/am/work_20160801_0801.log life_20160801_log/am/work_20160801_0901.log life_20160801_log/am/work_20160801_1001.log life_20160801_log/am/work_20160801_1101.log life_20160801_log/am/work_20160801_1201.log

相对来说,方法2稍微快一点 如果对时间效率要求不是非常高,可以使用第一种,代码简洁一些