zip 包自动解压缩脚本 | 学习笔记

简介: 快速学习 zip 包自动解压缩脚本

开发者学堂课程【Shell 编程入门到精通zip 包自动解压缩脚本】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/453/detail/5603


zip 包自动解压缩脚本


内容介绍

一、自动解压 ZIP 数据包脚本

二、使用函数封装


一、自动解压 ZIP 数据包脚本

如下脚本为自动解压 zip 包脚本,仅供参考,可以根据实际情况修改,可以举一反三,应用到其他的应用中。脚本中首行自动解压包,Define Path 定义路径,测试路径中mkdir 创建路径,cd test1,生成 passwd.zip,再定义两个变量 PATH1PATH2路径,打印欢迎信息,此处e!为修改后不保存,然后 cd PATH1下面,去 for i=infind 当前目录下所有等于这个路径的,并且 awk -F.为分隔的,打印出$2。找到对应的名字后解压,此处执行一遍,如,

[root@xuegod63 test]#vim zip-auto.sh

#!/bin/sh

#auto zip package

#Define Path

#####tes t######

mkdir -p / root/shell/test1 / root/shell/test2

cd /root/shell/test1 ; zip passwd.zip /etc/ passwd

#####test#######

PATH1=/ root/shell/ test1

PATH2=/ root/shell/test2

#Print welcome info

cat <

++---------welcome to use auto zip scripts-------+

EOF

#Find Dir all ZIP packages查找目录PATH1下所有的zip包,并创建解压目录PATH2

cd $PATH1

for i in ‘find – name *.zip"|awk -F. {print $2}'’

do

unzip -0 .$i.zip -d $PATH2$i

done

"zip-auto.sh" 23L,653C

[ root@xuegod63 test]# ./zip-auto.sh

adding: etc/passwd (deflated 59%)

++- -------------------------------------------------------++

++---------welcome to use auto zip scripts-------+

++--------------------------------------------------------++

Archive: ./ passwd.zip

inflating: / root/shell/test2/ passwd/etc/passwd

cd/root/shell/test1路径会有一个压缩包,解压zip,如,

[ root@xuegod63 test2]# ls / root/shell/test1

passwd. zip

[ root@xuegod63 test2]# cd !$

cd /root/shell/test1

[ root@xuegod63 test1]# ls

passwd. zip

[ root@xuegod63 test1]# unzip passwd. zip

Archive: passwd . zip

inflating: etc/ passwd

[ root@xuegod63 test1]#ls

etc passwd.zip

[ root@xuegod63 test1]#ls etc/

passwd

[ root@xuegod63 test1]#ls etc/passwd

etc/passwd

如上 cd test1已经有 etc/passwd 文件了,说明解压成功,所以看不懂的命令可以执行一下。

接下来 PATH1 是源,PATH2 是要解压到的地方,弹出欢迎信息,看不到长语句,可以执行一下,如 find – name *.zip"|awk -Ffind 查找将包含.zip的文件过滤出来,然后加 awk 可取出这个值,/passwd,因为有很多.zip 所以也会有很多/passwd,每个值都在这个地方映示一个文件名的列表,第一次取值是 passwd,取值后执行 do 中的语句,-d为解压到什么地方,如,

[ root@xuegod63 test1]# find . - name "* . zip"

. / passwd. zip

[ root@xuegod63 test1]# find . – name "*.zip"| awk -F. '{print $2}'

/passwd

[ root@xuegod63 test1]# unzip -o ./ passwd -d /opt/

Archive: . /passwd. zip

inflating: /opt/etc/ passwd

[ root@xuegod63 test1]# ls /opt/

etc webapp_ db. sql

[ root@xuegod63 test1]# ls /opt/etc/

passwd

[ root@xuegod63 test1]# unzip ./passwd -d /opt/

Archive: . /passwd. zip

此处-o参数为直接覆盖不显示,将压缩包解压到opt下,不写后缀名也可以,如,

[ root@xuegod63 test1]# unzip . /passwd -d /opt/

Archive: . / passwd . zip

inflating: /opt/etc/passwd

[ root@xuegod63 test1]# ls /opt/etc/ passwd

/opt/etc/passwd

$PATH1$i 为合成路径,这里做下替换,PATH等于/root/shell/test2加上$i路径passwdzip 包则会解压到这个目录下,查看,如,

[ root@xuegod63 test]# ls / root/shell/test2/ passwd/

etc

[ root@xuegod63 test]# ls / root/ shell/test2/ passwd/ etc/ passwd

/ root/ shell/test2/ passwd/ etc/ passwd

[ root@xuegod63 test]#vim -$

root:x:0: 0: root:/ root: /bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon: x:2:2:daemon: /sbin:/sbin/ nologin

注意:for 语句可以取得名字列表,除了用 echo 表示名字还可以用 cat<。

当脚本不太好理解的时候可以通过-x进行分析。第一个是 mkdir -p 创建两个路径,然后cd进去,zip 解压后弹出消息,两个变量赋值,赋值完后 cat 显示对应结果内容,再次 cd 到路径/root/shell/test1,替换变量,然后 find 查看当前目录下所有.zip,找到后通过 awk -F去输出。

awk -F'{print $2}',是awk列操作,-F. .作为分隔符,print 输入,$2表示第2列,输出完后通过awk取第二列内容,如,

[ root@xuegod63 test1]# find . -name '*.zip'| awk -F. '{print $2}'

/passwd

[ root@xuegod63 test1]# find . -name '* .zip'

./passwd. zip

然后是for循环语句,unzip 解压会读出zip解压到/root/shell/test2/passwd,最后是解压过程信息。


二、使用函数封装

1、案例v2脚本

执行v2脚本,拷贝文件到opt,输入1操作,提示你的操作为Copy,然后会提示你输入源文件路径,和Copy到哪里,然后提示拷贝成功,如下

[ root@xuegod63 test]#./v2

v2.sh

v2-使用函数封装-公司自动处理文件备份管理的脚本.txt

[ root@xuegod63 test1]#./ v2-使用函数封装-公司自动处理文件备份管理的脚本.txt

*******************

1 Copy

2 Delete

3 Baxkup

4 Quit

*******************

1

You selection is Copy

Please input source dircetory or file

/etc/ passwd

Please input destination dircetory

/opt

The files have been susscessfully copied

Press any key to continue. . .

此时按下任意键清屏,查看是否拷贝成功,如,

[ root@xuegod63 test]#ls /opt/

passwd

再在菜单下输入2,提示操作为删除,输入要删除的文件或目录,回车,如,

2

You selection is delete

Delete the file or dircetory

/ opt/passwd

Proceed with removal? y

y

sussessfully delete!

Press any key to continue...

按下任意键回车,查看是否删除成功,如,

[ root@xuegod63 test]#ls /opt/

[ root@xuegod63 test]#

在菜单下输入3,提示操作为备份,输入要备份的文件或目录,备份到哪里,如,

3

You selection is Back

Please input source dircetory or file

/boot

Please input destination dircetory

/opt

等待文件输出完,按下任意键后清屏

输入4,显示Exit…

2、案例v3脚本

下面运行v3版本

[ root@xuegod63 test]#./ v3-使用函数封装-公司自动处理文件备份管理的脚本.txt

bash interpreter:No such file or directory

[ root@xuegod63 test]#dos2unix v3-使用函数封装-公司自动处理文件备份管理的脚本.txt

[ root@xuegod63 test]#./ v3-使用函数封装-公司自动处理文件备份管理的脚本.txt

===========================

File Management System

A shell to copy, delete & backup files or directories on Linux

Author: xuegod

===========================

USER: root HOST: xuegod63.cn DATE: 2015-03-21

1 Copy

2. Delete

3. Backup

4. Quit

Please choose a function

(Press the number before the optionthen press reutrn) :

弹出以上消息,显示这是一个文件系统管理,系统所具功能,作者信息,当前使用用户信息,主机名时间,然后是CopyDeleteBackupQuit,选择选项输入行号,输入1回车,显示当前正在拷贝,请输入要拷贝文件名或者全路径信息,查看备份信息,如

====================

Copy Files or Directories

====================

Please enter a valid file or directory FULL path: /etc/passwd

[Success] checked File

[Success] checked Permission Read

===================

Please enter a target FULL path:

这里通过ehco -eSuccess做了语法的加亮提示,表示文件存在并且有权限,接下来输入要拷贝到的目标路径,然后提示拷贝成功,按下任意键回车清屏继续,如,

===========================

Please enter a target FULL path: /opt

[Success] checked target Directory

[ Success] checked Permission Read

[Success ] checked Permission Write

[Success] Copyed the File

Press any key to continue:

清屏后返回菜单界面继续输入2,删除/opt下面的passwd,删除时会显示输入Y,确认是否要删除,小写也可以,如,

====================

Delete Files or Directories

====================

Please enter a valid file or directory FULL path: /opt

[Success] checked Directory

[Success ] checked Permission Read

[Success] checked Permission Write

========================

total 12

drwxr-xr-x. 2 root root 4096 Mar 21 21:15.

dr-xr-xr-x. 27 root root 4096 Feb 10 21:21..

- rw-r- -r- -1 root root 1805 Mar 21 21:15 passwd

=======================

Please press Y to ensure, or press any key to cancel: y

[Sucess] Removed the Directory

备份也同理,这时按下4退出,会显示是否确认退出,输入任意键就会返回,输入y则退出,如,

====================

Please choose a function

(Press the number before the optionthen press reutrn) :4

====================

Please type y to confirm exit the shelly

[ root@xuegod63 test]#

3v2v3脚本内容

1v2函数的实现,脚本中首先定义了一个源,两个目标路径,定义完后会弹很多消息,这些消息可以通过变量的方式获取,赋值完后直接引用就行,像报错信息,目标路径,源文件系统等,然后需要做一些封装,输入函数后判断源路径是否存在,如果不存在则报错,然后定义每个函数的功能,比如copy的后期调用,delete删除,backup 备份,使用case进行选择获取输入的选项,如果输入是1只需要调用函数即可,read输出信息后执行clear进行清除

v2-使用函数封装-公司自动处理文件备份管理的脚本.txt:

#!/bin/bash

srcPath= "

dstPath=""

ErrMsg="Yout enter the directory orfile dose not exist. "

DstDirMsg="Please input destination dircetory"

SrcFilesMsg= "Please input source dircetory or file."

DstFlesMsg="Delete the file or dircetory. "

DirFileMsg=””

function inputSourcePath(){

while true

do

2v3脚本的实现比v2版本更复杂,将一系列颜色赋值给变量,echo -e或者-e可搜索到函数的具体调用,如,

#show system info

TIME=$(date +%Y-%m-%d)

echo “USER: $USER HOST:$HOSTNAME DATE:$TIME”

# base functions

# file or directory

function isFile0rDir() {

if test -d $1; then

echo -e "[${green}Success${nc}] checked Directory"

return 1

elif test -f $1; then

echo -e "[${green}Success${nc}] checked File "

return 0

else

echo -e "[${red}Failed${nc}] No such file or directory"

read – p "Press any key to retry:" Any

echo 输出 Success 时,在前后加上{green}{nc}可以对颜色做出区别,在 echo 输出时可以通过读取环境变量和 hosename 来判断当前用户是 root,执行 case 判断时既要y又要Y则可表达为y|Y的方式。

相关文章
|
2月前
|
运维 Serverless 数据库
如何使用zipfile模块解压zip文件并返回解压后的结果
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
4月前
|
Java 关系型数据库 MySQL
文件在线压缩与解压|基于Springboot实现文件在线压缩与解压
文件在线压缩与解压|基于Springboot实现文件在线压缩与解压
|
Unix Linux
Linux文件打包及压缩、解包及解压
前面学习了文件的查找,这篇文章将学习Linux中文件的打包及解压、文件的解包和解压。这就是这篇文章的学习目标,学会如何打包压缩,解包解压。
270 0
|
SQL Shell Linux
zip 包自动解压缩脚本 | 学习笔记
快速学习 zip 包自动解压缩脚本
182 0
|
SQL IDE Shell
zip包自动解压缩脚本 | 学习笔记
快速学习zip包自动解压缩脚本
540 0
|
Linux 数据安全/隐私保护 存储
Linux 下zip包的压缩与解压
范例:   zip命令可以用来将文件压缩成为常用的zip格式。unzip命令则用来解压缩zip文件。   1. 我想把一个文件abc.txt和一个目录dir1压缩成为yasuo.zip:   # zip -r yasuo.
7863 0
|
Python
Python 技术篇-用zipfile库进行zip文件的压缩与解压实例演示,python压缩本地文件夹为zip文件并保留目录结构
Python 技术篇-用zipfile库进行zip文件的压缩与解压实例演示,python压缩本地文件夹为zip文件并保留目录结构
346 0
Python 技术篇-用zipfile库进行zip文件的压缩与解压实例演示,python压缩本地文件夹为zip文件并保留目录结构