阿男的小窝

View the Project on GitHub

使用bash批量解压zip文件并为每个zip文件创建目录

最近在看这本书:

把它的源代码clone下来:

$ git clone https://github.com/Apress/website-scraping-w-python.git

看到里面有多个zip文件:

$ ls
9781484239247.jpg Chapter 2.zip     Chapter 4.zip     Chapter 6.zip     LICENSE.txt
Chapter 1.zip     Chapter 3.zip     Chapter 5.zip     Contributing.md   README.md

可以使用bash提供的for循环一个一个显示zip文件:

$ for f in *.zip; do echo $f; done
Chapter 1.zip
Chapter 2.zip
Chapter 3.zip
Chapter 4.zip
Chapter 5.zip
Chapter 6.zip

使用bash string的操作符(Manipulating Strings),去掉.zip扩展名:

$ echo ${f%*.zip}
Chapter 1

使用unzip命令的-d选项可以在解压文件的时候,创建目录:

+ unzip -d foo 'Chapter 2.zip'
Archive:  Chapter 2.zip
  inflating: foo/navigator.py

注意上面,带空格的文件名要用括号括起来。其中,单引号直接括起来字符串,双引号可以引用变量,下面是单引号和双引号的区别:

$ foo="hello"
$ echo "$foo"
hello
$ echo '$foo'
$foo

可以看到,双引号里面的变量会被展开,而单引号里面的不会。综合上面讲的,组合起来,完整的命令如下:

$ for f in *.zip; do unzip -d "${f%*.zip}" "$f"; done

执行过程如下:

可以看到所有的zip文件都被解压到各自的目录去了。结果如下:

熟练使用好bash脚本编程,可以把很多工作自动化。