`
xmeteor
  • 浏览: 75724 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

linux下通用解压缩程序Perl版

 
阅读更多

http://pwwang.com/2009/01/01/linux下通用解压缩程序perl版/

 

无意中看到有人贴linux中常用的解压缩命令的用法,通常最后都有一个程序叫做sEx, 叫super extractor, 我去SF上下下来看了一下,也是perl写的, 不过真的只是一个通用的解压的程序, 压缩并没有实现, 于是自己动手把通用的解压缩都实现了,供自己用,也供大家方便。

不过说实话, 我用的压缩格式并不多, 并不需要用太多的命令,一般用tar(只归档,不压缩),tar.gz,rar(windows用得多)。

这个程序支持格式:tar,tar.gz,gz,tar.bz2,bz2,tar.bz,bz,tar.Z,Z,zip,rar,lha,rpm

可以压缩,解压,查看压缩包的内容

基本用法:

压缩:exInOne a 归档文件 文件1 <文件2 文件3 …>

解压:exInOne x 归档文件

查看:exInone l 归档文件
 
#!/usr/bin/perl -w
 
######################################
# Several Extractors in One : exInOne
# Author: pwwang
# Site: http://pwwang.com
# You can distribute it, modify it,
# but keep this information
######################################
 
use warnings;
use strict;
 
my %cmds = ( # 0->program 1->command for decompress 2->command for compress 3->list
    'tar.gz' => ['tar', 'tar -zxvf arg1', 'tar -zcvf arg1 arg2', 'tar -ztvf arg1'],
    'tar' => ['tar', 'tar -xvf arg1', 'tar -cvf arg1 arg2', 'tar -tvf arg1'],
    'tgz' => ['tar', 'tar -zxvf arg1', 'tar -zcvf arg1 arg2', 'tar -ztvf arg1'],
    'gz' => ['gzip', 'gzip -d arg1', 'gzip -cr arg2 > arg1', 'gzip -l arg1'],
    'tar.bz2' => ['tar', 'tar -jxvf arg1', 'tar -jcvf arg1 arg2', 'tar -jtvf arg1'],
    'bz2' => ['bzip2,gtar', 'bzip2 -d arg1', 'bzip2 -cz arg2 > arg1', 'tar -jtvf arg1'],
    'tar.bz' => ['tar', 'tar -jxvf arg1', 'tar -jcvf arg1 arg2', 'tar -jtvf arg1'],
    'bz' => ['bzip2,tar', 'bzip2 -d arg1', 'bzip2 -z arg1', 'tar -jtvf arg1'],
    'tar.Z' => ['tar', 'tar -Zxvf arg1', 'tar -Zcvf arg1 arg2', 'tar -Ztvf arg1'],
    'Z' => ['compress', 'compress -d arg1', 'compress -c arg2 > arg1 ', 'tar -Ztvf arg1'],
    'zip' => ['zip,unzip', 'unzip arg1', 'zip arg1 arg2', 'unzip -Zl arg1'],
    'rar' => ['rar', 'rar x arg1', 'rar a arg1 arg2', 'echo Unsupport listing rar content'],
    'lha' => ['lha', 'lha -e arg1', 'lha -a arg1 arg2', 'lha -l arg1'],
    'rpm' => ['rpm2cpio', 'rpm2cpio arg1 | cpio -div', 'echo Unsupport creating rpm archive', 'rpm2cpio arg1 | cpio -tiv'],
);
 
sub get_ext ($) { #get extension of a file name
    my ($f) = @_;
    my $ext;
    if($f =~ /.+\.(.+)$/){ $ext = $1; } 
    else { $ext = ""; }
    if($ext eq 'gz' || $ext eq 'bz2' || $ext eq 'bz' || $ext eq 'Z'){
        if($f =~ /.+\.(tar\.$ext)/){ $ext = $1;    }
    }
    return $ext;
}
 
sub check4exes { # Check for missing tools
    while (@_>0) {
        my $bin = shift;
        unless( join('|',`which $bin`) =~/\/$bin(\||$)/ ) {
            print "exInOne needs $bin in your \$PATH to handle this format!\n";
            exit 10;
        }
    }
}
 
sub ifTypeSupport ($) {
    my ($ex) = @_;
    if(!exists $cmds{$ex}){
        print "Unsupport file type: $ex \n";
        exit 5;
    }
}
 
sub checkFile ($) { #check file and return available extension
    my ($fn) = @_;
    my ($ex) = get_ext($fn);
    print "File: $fn\n";
    ifTypeSupport($ex);
    my @b = split /,/,$cmds{$ex}->[0];
    check4exes(@b);
    return $ex;
}
 
# Main program
my $command = shift @ARGV; $command="" unless( defined $command );
my $opts="";
if( $command =~ /^-/ ) {
    ($opts) = $command =~ /^-(.*)/;
    $command = shift @ARGV;
}
my $archive = shift @ARGV;
my @files = @ARGV;
 
unless ($command =~ /^(l|x|a)$/) {
    print "Usage: exInOne [-options] command archive [files...]\n";
    print "commands:\n";
    print "    l   List\n";
    print "    x   Extract\n";
    print "    a   Add files or create new archive\n";
    exit 5;
}
 
my $ext = checkFile($archive);
my $cmd;
 
if    ($command eq 'l') {
    $cmd = $cmds{$ext}->[3];
    $cmd =~ s/arg1/$archive/;
    print `$cmd`;
}
elsif ($command eq 'x') {
    $cmd = $cmds{$ext}->[1];
    $cmd =~ s/arg1/$archive/;
    print `$cmd`;
}
elsif ($command eq 'a') {
    $cmd = $cmds{$ext}->[2];
    $cmd =~ s/arg1/$archive/;
    $cmd =~ s/arg2/@files/;
    print `$cmd`;
}
分享到:
评论

相关推荐

    perl-5.28.zip

    解压缩后的文件可以直接安装,使Perl成为Mac上进行脚本编写和自动化任务的强大工具。 源代码的提供意味着用户可以深入理解Perl的工作原理,甚至可以根据自己的需求修改和扩展语言。这对于开发者来说是一个宝贵的...

    perl语言精讲(胶水语言)

    2. **解压缩并编译**:使用命令`gunzip perl-5.004.tar.gz`解压文件,然后使用`tar xvf - &lt; perl-5.004.tar.gz`提取文件。之后运行`make makefile`进行编译配置。 3. **安装可执行文件**:将编译生成的可执行文件...

    Perl编程24学时教程

    对于UNIX和Linux系统,通常通过下载压缩包,解压缩,并使用`Configure`、`make`、`make test`和`make install`命令进行编译和安装。对于Windows用户,则推荐使用ActiveState提供的ActivePerl安装包,这简化了安装...

    Linux_kernel_3.6.4编译操作文档

    Linux Kernel 3.6.4编译操作文档详细介绍了如何下载、解压缩、配置并编译Linux内核的3.6.4版本。以下是文档中涉及的关键知识点: 1. 下载内核源代码:文档中提到了如何通过wget工具从官方网站下载Linux内核源代码。...

    linux下apache+web服务器搭建教程借鉴.pdf

    Linux发行版通常会预装Apache软件包,或者可以通过软件管理器(如`apt-get`或`yum`)进行安装。如果你选择手动安装,有两种主要方式: 1. **可执行文件包**:适用于不熟悉编译的初学者,下载后直接解压缩即可使用。...

    SUSE Linux下源码编译方式安装MySQL 5.6过程分享

    用户可以从CMake的官方网站下载对应版本(文章中提到的是2.6.4版本),然后解压缩并配置环境变量以确保cmake命令可以在系统中被识别。 在源码安装MySQL之前,用户还需要确保下载了正确的源码包,文章中提到的版本是...

    Linux命令全称,包括SQL等等

    106. **uncompress=UnCompress**:解压缩文件。 107. **uniq=Unique**:过滤重复的行。 108. **unzip=UnZIP**:解压ZIP格式的文件。 109. **uptime=DisplaySystemUptime**:显示系统运行时间。 110. **vi=Vi(Visual...

    ddoSutil:ddoSutil(ddos实用程序)是旨在帮助处理各种ddos攻击方法的一系列Linux脚本。

    从github克隆或以zip下载,然后解压缩到所需目录。 将脚本设置为可执行文件(例如:chmod + x ddos​​util.sh)。 用法 在目录的根目录中是ddosutil.sh,它通过构建防火墙,阻止列表,TCP堆栈调整,队列更改,连接...

    linux Apache CGI 安装配置

    - 下载完成后,使用`tar`命令解压缩文件,例如:`tar xvzf httpd-2.2.0.tar.gz`。 - 进入解压后的目录,例如:`cd httpd-2.2.0`。 - 使用`./configure`命令指定安装路径,例如:`./configure --prefix=/usr/local...

    WU-CRISPR:用于CRISPRCas9敲除的WashU gRNA设计器

    将WU-CRISPR.tar.gz文件放置在Linux系统中的任何位置,并使用以下命令解压缩:'tar -xzvf WU-CRISPR.tar.gz' 将输入的FASTA文件复制到新创建的WU-CRISPR目录中。 键入“ perl wu-crispr.pl”以运行程序并查看帮助...

    xampp安装软件.zip

    用户首先需要从官方网站下载适用于其操作系统的XAMPP版本,然后将下载的.zip文件解压缩到本地文件夹,通常建议选择一个不会被其他程序冲突的位置。解压完成后,运行安装目录下的启动脚本(例如,对于Windows系统是...

    ozymands_src

    要解压此文件,用户可以使用命令行工具`tar`和`gzip`,或者使用图形界面的解压缩软件。 2. **Perl编程语言**:Perl是一种高级、通用、解释型、动态的编程语言,尤其适用于文本处理和系统管理任务。在压缩包中,有四...

    LinuxApacheWeb服务器配置教程宣贯.pdf

    对于初学者,如果Linux发行版已经包含了Apache软件包,可以通过Linux安装程序自动配置和安装。对于熟悉命令行操作的用户,可以从Apache官方网站下载源代码或者预编译的二进制文件进行手动安装。如果是源代码包,需要...

    最新更新版PHP个人发卡网源码全开源解密版集成了码支付和轻云支付接口+安装教程等.txt

    2. **上传源码**:将下载的源码包上传至服务器上的指定目录(如public_html)并解压缩。 3. **配置数据库**:创建一个MySQL数据库并设置好相应的用户名和密码。然后修改源码中的配置文件(如config.php),填写正确...

    installingGT

    - 解压缩下载的文件到一个合适的目录。 2. **设置环境变量**: - 将 Globus Toolkit 的路径添加到系统的环境变量中,以便其他应用程序能够找到它。 3. **安装 Java WSCore 和基本服务**: - 执行安装脚本来安装 ...

    nginx1.18.0 离线 rpm 安装包

    1. 解压缩所有依赖包。 2. 配置、编译和安装每个依赖包,如 `./configure; make; make install`。 3. 将 Nginx 的 RPM 包移动到系统中的 RPM 存储目录(例如 `/var/cache/yum/x86_64/8Server/epel`)。 4. 使用 `rpm...

    Python库 | kiwitcms-tap-plugin-0.5.tar.gz

    要使用这个库,首先需要将tar.gz文件解压缩。在命令行中,可以使用`tar -xzf kiwitcms-tap-plugin-0.5.tar.gz`命令完成解压。解压后,内部可能包含setup.py文件,这是一个标准的Python安装脚本,使用`python setup....

    网管教程 从入门到精通软件篇.txt

    INP:Oracle 3.0版或早期版本的表单源代码 INRS:INRS远程通信声频 INS:InstallShield安装脚本;X-Internet签字文件;Ensoniq EPS字簇设备;Cell/ⅡMAC/PC抽样设备 INT:中间代码,当一个源程序经过语法检查后...

    liunx命令全称.md

    - 解压缩.tar文件。 #### 10. chmod (Changemode) - **全称**: Changemode - **功能**: 改变文件或目录的访问权限。 - **应用场景**: - 调整文件或目录的读写执行权限。 #### 11. umount (Unmount) - **全称**: ...

    java开源包8

    JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮以及一些通用的面向对象方法。 Java数据库连接池 BoneCP BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接...

Global site tag (gtag.js) - Google Analytics