linux解压缩命令

# zip&unzip

# zip命令

-q 表示不显示压缩进度状态
-r 表示子目录子文件全部压缩为zip;这部分比较重要,不然的话只有something这个文件夹被压缩,里面的没有被压缩进去
-e 表示你的压缩文件需要加密,终端会提示你输入密码的;还有种加密方法,这种是直接在命令行里做的,比如zip -r -P Password01! modudu.zip SomeDir, 就直接用Password01!来加密modudu.zip了
-m 表示压缩完删除原文件
-o 表示设置所有被压缩文件的最后修改时间为当前压缩时间

当前目录操作:zip -qremo dist.zip dist

当跨目录操作:zip -q -r -e -m -o '\user\samy\someDir\someFile.zip' '\users\someDir'

zip -r dist.zip dist/
zip -r bower_components.zip bower_components/
1
2

# unzip命令

​ 语法:unzip [选项] 压缩文件名.zip

​ 各选项的含义分别为:

  • -x 文件列表 解压缩文件,但不包括指定的file文件。

  • -v 查看压缩文件目录,但不解压。

  • -t 测试文件有无损坏,但不解压。

  • -d 目录 把压缩文件解到指定目录下。

  • -z 只显示压缩文件的注解。

  • -n 不覆盖已经存在的文件。

  • -o 覆盖已存在的文件且不要求用户确认。

  • -j 不重建文档的目录结构,把所有文件解压到同一目录下。 123456789101112131415

将压缩文件text.zip在当前目录下解压缩

unzip -o text.zip 
1

将压缩文件text.zip在指定目录/tmp下解压缩,如果已有相同的文件存在,要求unzip命令不覆盖原先的文件

unzip -n text.zip -d /tmp 
1

查看压缩文件目录,但不解压

unzip -v text.zip 
1

解压到指定目录:

unzip -d $WORKDIR/portal/ $WORKDIR/portal/AAWeb.zip
1

涉及前端相关

httpdPath=/var/www/html/files/autorun/pro/portal
zip -r AAWeb.zip dist # 压缩
cp -rf AAWeb.zip $httpdPath/ 
unzip -o $WORKDIR/portal/AAWeb.zip # 解压
mv dist AAWeb
1
2
3
4
5

# tar

# 命令参数

tar [-ABcdgGhiklmMoOpPrRsStuUvwWxzZ][-b <区块数目>][-C <目的目录>][-f <备份文件>][-F <Script文件>][-K <文件>][-L <媒体容量>][-N <日期时间>][-T <范本文件>][-V <卷册名称>][-X <范本文件>][-<设备编号><存储密度>][--after-date=<日期时间>][--atime-preserve][--backuup=<备份方式>][--checkpoint][--concatenate][--confirmation][--delete][--exclude=<范本样式>][--force-local][--group=<群组名称>][--help][--ignore-failed-read][--new-volume-script=<Script文件>][--newer-mtime][--no-recursion][--null][--numeric-owner][--owner=<用户名称>][--posix][--erve][--preserve-order][--preserve-permissions][--record-size=<区块数目>][--recursive-unlink][--remove-files][--rsh-command=<执行指令>][--same-owner][--suffix=<备份字尾字符串>][--totals][--use-compress-program=<执行指令>][--version][--volno-file=<编号文件>][文件或目录...]
1
  • -A或--catenate 新增文件到已存在的备份文件。
  • -b<区块数目>或--blocking-factor=<区块数目> 设置每笔记录的区块数目,每个区块大小为12Bytes。
  • -B或--read-full-records 读取数据时重设区块大小。
  • -c或--create 建立新的备份文件。
  • -C<目的目录>或--directory=<目的目录> 切换到指定的目录。
  • -d或--diff或--compare 对比备份文件内和文件系统上的文件的差异。
  • -f<备份文件>或--file=<备份文件> 指定备份文件。
  • -F<Script文件>或--info-script=<Script文件> 每次更换磁带时,就执行指定的Script文件。
  • -g或--listed-incremental 处理GNU格式的大量备份。
  • -G或--incremental 处理旧的GNU格式的大量备份。
  • -h或--dereference 不建立符号连接,直接复制该连接所指向的原始文件。
  • -i或--ignore-zeros 忽略备份文件中的0 Byte区块,也就是EOF。
  • -k或--keep-old-files 解开备份文件时,不覆盖已有的文件。
  • -K<文件>或--starting-file=<文件> 从指定的文件开始还原。
  • -l或--one-file-system 复制的文件或目录存放的文件系统,必须与tar指令执行时所处的文件系统相同,否则不予复制。
  • -L<媒体容量>或-tape-length=<媒体容量> 设置存放每体的容量,单位以1024 Bytes计算。
  • -m或--modification-time 还原文件时,不变更文件的更改时间。
  • -M或--multi-volume 在建立,还原备份文件或列出其中的内容时,采用多卷册模式。
  • -N<日期格式>或--newer=<日期时间> 只将较指定日期更新的文件保存到备份文件里。
  • -o或--old-archive或--portability 将资料写入备份文件时使用V7格式。
  • -O或--stdout 把从备份文件里还原的文件输出到标准输出设备。
  • -p或--same-permissions 用原来的文件权限还原文件。
  • -P或--absolute-names 文件名使用绝对名称,不移除文件名称前的"/"号。
  • -r或--append 新增文件到已存在的备份文件的结尾部分。
  • -R或--block-number 列出每个信息在备份文件中的区块编号。
  • -s或--same-order 还原文件的顺序和备份文件内的存放顺序相同。
  • -S或--sparse 倘若一个文件内含大量的连续0字节,则将此文件存成稀疏文件。
  • -t或--list 列出备份文件的内容。
  • -T<范本文件>或--files-from=<范本文件> 指定范本文件,其内含有一个或多个范本样式,让tar解开或建立符合设置条件的文件。
  • -u或--update 仅置换较备份文件内的文件更新的文件。
  • -U或--unlink-first 解开压缩文件还原文件之前,先解除文件的连接。
  • -v或--verbose 显示指令执行过程。
  • -V<卷册名称>或--label=<卷册名称> 建立使用指定的卷册名称的备份文件。
  • -w或--interactive 遭遇问题时先询问用户。
  • -W或--verify 写入备份文件后,确认文件正确无误。
  • -x或--extract或--get 从备份文件中还原文件。
  • -X<范本文件>或--exclude-from=<范本文件> 指定范本文件,其内含有一个或多个范本样式,让ar排除符合设置条件的文件。
  • -z或--gzip或--ungzip 通过gzip指令处理备份文件。
  • -Z或--compress或--uncompress 通过compress指令处理备份文件。
  • -<设备编号><存储密度> 设置备份用的外围设备编号及存放数据的密度。
  • --after-date=<日期时间> 此参数的效果和指定"-N"参数相同。
  • --atime-preserve 不变更文件的存取时间。
  • --backup=<备份方式>或--backup 移除文件前先进行备份。
  • --checkpoint 读取备份文件时列出目录名称。
  • --concatenate 此参数的效果和指定"-A"参数相同。
  • --confirmation 此参数的效果和指定"-w"参数相同。
  • --delete 从备份文件中删除指定的文件。
  • --exclude=<范本样式> 排除符合范本样式的文件。
  • --group=<群组名称> 把加入设备文件中的文件的所属群组设成指定的群组。
  • --help 在线帮助。
  • --ignore-failed-read 忽略数据读取错误,不中断程序的执行。
  • --new-volume-script=<Script文件> 此参数的效果和指定"-F"参数相同。
  • --newer-mtime 只保存更改过的文件。
  • --no-recursion 不做递归处理,也就是指定目录下的所有文件及子目录不予处理。
  • --null 从null设备读取文件名称。
  • --numeric-owner 以用户识别码及群组识别码取代用户名称和群组名称。
  • --owner=<用户名称> 把加入备份文件中的文件的拥有者设成指定的用户。
  • --posix 将数据写入备份文件时使用POSIX格式。
  • --preserve 此参数的效果和指定"-ps"参数相同。
  • --preserve-order 此参数的效果和指定"-A"参数相同。
  • --preserve-permissions 此参数的效果和指定"-p"参数相同。
  • --record-size=<区块数目> 此参数的效果和指定"-b"参数相同。
  • --recursive-unlink 解开压缩文件还原目录之前,先解除整个目录下所有文件的连接。
  • --remove-files 文件加入备份文件后,就将其删除。
  • --rsh-command=<执行指令> 设置要在远端主机上执行的指令,以取代rsh指令。
  • --same-owner 尝试以相同的文件拥有者还原文件。
  • --suffix=<备份字尾字符串> 移除文件前先行备份。
  • --totals 备份文件建立后,列出文件大小。
  • --use-compress-program=<执行指令> 通过指定的指令处理备份文件。
  • --version 显示版本信息。
  • --volno-file=<编号文件> 使用指定文件内的编号取代预设的卷册编号。

# 压缩

压缩文件 非打包

# touch a.c       
# tar -zcvf test.tar.gz a.c   //压缩 a.c文件为test.tar.gz
a.c
1
2
3

列出压缩文件内容

# tar -tzvf test.tar.gz 
-rw-r--r-- root/root     0 2010-05-24 16:51:59 a.c
1
2

# 解压

解压文件

# tar -zxvf test.tar.gz 
a.c
1
2

# 涉及前端相关

tar -zcvf AAWeb.tar.gz dist # 压缩
tar -zxvf AAWeb.tar.gz # 解压
mv dist AAWeb

tar zcvf pdf-render-puppeteer.tar.gz --exclude=./node_modules --exclude=./ztest --exclude=./.git ./
mkdir pdf-render-puppeteer
tar zxvf pdf-render-puppeteer.tar.gz -C pdf-render-puppeteer
1
2
3
4
5
6
7

# 指定目标目录

参数:-C

mkdir /data
ls /data
tar xf test1.tar.gz -C /data
ls /data/test/
1
2
3
4

# 排出指定文件打包

tar命令里面的目标文件是绝对路径格式,excludefile里面就也必须是绝对路径;

tar命令里面的目标文件是相对路径格式,excludefile里面就也必须是相对路径;

tar --exclude=abc/1.txt -zcvf abc.tar.gz abc
tar zcvf new1_test.tar.gz ./* --exclude=file{4,5}.txt  #如果连续的,有规律,可以使用{}
1
2

# 实践

# 创建一个名为 abc 的目录
mkdir abc

# 进入 abc 这个目录
cd abc

# 创建两个文件,文件名为1.txt 2.txt
touch 1.txt 2.txt

# 切换到 abc 的父目录
cd ..

#排除目录中的某些文件,然后进行压缩。
#tar --exclude=目录名/* 或者 文件名 -zcvf 备份文件名.tgz 目录名
# 将文件 abc 进行压缩时,排除1.txt,压缩后的文件名为 abc.tar
tar --exclude=abc/1.txt -zcvf abc.tgz abc
tar --exclude=abc/1.txt -zcvf abc.tar.gz abc
#tar -zcvf update.tar.gz update

# 解压文件
tar -zxvf abc.tgz
tar -zxvf abc.tar.gz

# 删除压缩文件
rm abc.tgz

# 删除解压后的文件,并删除文件夹
rm -rf abc

#打包时加上当时日期
tar zcf /opt/test_$(date +%F).tar.gz ./test

#过滤多个文件夹(文件):如果想要过滤掉多个的话,就写多个–exclude=想要过滤掉的文件 就行了
tar -zcvf aaa/bbb/aabb.tar.gz --exclude=aaa/ccc --exclude=aaa/ddd --exclude=aaa/eee.txt aaa
#这条命令就是指排除掉aaa 目录下的ccc, ddd, ddd.txt 三个目标文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

# jar

# 命令参数

其中{ctxu}这四个选项必须选其一。[v f m e 0 M i ]是可选选项,文件名也是必须的。

  • -c 创建一个jar包
  • -t 显示jar中的内容列表
  • -x 解压jar包
  • -u 添加文件到jar包中
  • -f 指定jar包的文件名
  • -v 生成详细的报造,并输出至标准设备
  • -m 指定manifest.mf文件.(manifest.mf文件中可以对jar包及其中的内容作一些一设置)
  • -0 产生jar包时不对其中的内容进行压缩处理
  • -M 不产生所有文件的清单文件(Manifest.mf)。这个参数与忽略掉-m参数的设置
  • -i 为指定的jar文件创建索引文件
  • -C 表示转到相应的目录下执行jar命令,相当于cd到那个目录,然后不带-C执行jar命令

# 查看内容

jar tvf hello.jar    #查看hello.jar包的内容; 指定的jar包必须真实存在,否则会发生FileNoutFoundException。

vim samy-0.0.1-SNAPSHOT.jar #第二种方式

jar tvf hello.jar >hello.txt #导出解压列表
#如果你想查看解压一个jar的详细过程,而这个jar包又很大,屏幕信息会一闪而过,
#这时你可以把列表输出到一个文件中,慢慢欣赏!
1
2
3
4
5
6
7

# 压缩

简单打包

jar -cvf xxx.jar *
1

解压的文件放到某个文件夹下,然后进入这个文件里使用命令压缩

jar cvfm0 samy.jar META-INF/MANIFEST.MF .
1

# 解压

jar -xvf  samy.jar

jar cvfM TestZIP.jar test  #加M参数为了不生成META-INF相关内容
1
2
3

# 实践

# 新增/更新jar中文件

简单操作:要确保本地的包路径跟jar中的路径结构一致;

jar uvf ZBDPWeb-5.0.jar META-INF/test.js #替换目录下文件
jar uvf ZBDPWeb-5.0.jar META-INF/resources #替换目录下文件
1
2

方案一:通过jar命令替换jar中的文件【推荐】

  • 列出jar包中的文件清单

    jar tf samy-0.0.1-SNAPSHOT.jar

  • 提取出内部jar包的指定文件

    jar xf samy-0.0.1-SNAPSHOT.jar BOOT-INF/classes/realtime/t_ivr_data_bj.json

  • 然后可以修改文件

    vim BOOT-INF/classes/realtime/t_ivr_data_bj.json

  • 更新配置文件到内部jar包.(存在覆盖,不存在就新增)

    jar uf samy-0.0.1-SNAPSHOT.jar BOOT-INF/classes/realtime/t_ivr_data_bj.json

    更新内部jar包到jar文件:jar uf samy-0.0.1-SNAPSHOT.jar 内部jar包.jar

  • 可以查看验证是否已经更改

    vim samy-0.0.1-SNAPSHOT.jar

方案二:解压jar包,修改后重新打包jar

  • 解压

    unzip samy-0.0.1-SNAPSHOT.jar

  • 移除jar包,最好备份

    rm samy-0.0.1-SNAPSHOT.jar

  • 重新打包

    jar -cfM0 new-samy-0.0.1-SNAPSHOT.jar *

    或者

    jar -cvfm0 samy-0.0.1-SNAPSHOT.jar ./META-INF/MANIFEST.MF ./

  • 运行

    java -jar new-samy-0.0.1-SNAPSHOT.jar

总括:现在有2中可以行的方案:

1: 在Linux下把jar包解压,替换,打成jar。这样比较麻烦,这windos还不能用。

2 :可以直接用Java jar 工具来替换。

jar uvf test.jar test.class

这样会直接把test.class 直接添加到jar包的根目录。

jar uvf test.jar com/test/test.class

这样就可以替换相应目录的class文件了。

这里值得注意的是 test.class 必须放在com/test 文件下,要和jar的路径对应起来。不然会说没有这个文件或目录。jar 包 和 com 文件夹的上级在同一个目录。

# 相关链接

https://www.cnblogs.com/vurtne-lu/p/6208459.html

上次更新: 2022/04/15, 05:41:32
×