今天整理文件时碰到了一件头疼事,文件夹里有几十个子文件夹,一个一个压缩又太麻烦了,于是上网搜了搜解决方法,下面直接上命令:(注意:压缩文件夹名称中不能有空格!)
$ cd ~/tmp
$ for file in $(ls); do zip -r -q $file.zip $file; done
其中~/tmp
是被压缩文件夹的路径,zip
是压缩方法,-r
和-q
是命令参数,其含义如下:
参数 | 含义 |
---|---|
-q | 不显示压缩进度状态 |
-r | 子目录及子目录下文件全部压缩; 注意,不加的话只有 file 这个文件夹被压缩,而里面的文件不会被压缩进去 |
-e | 对压缩文件进行加密,终端会提示输入密码; 还有另一种加密方法,是直接在命令行里做的,比如: zip -r -P pwd file.zip file , 直接用pwd 来加密file.zip
|
-m | 压缩完成时删除原文件 |
-o | 设置被压缩文件的最后修改时间为当前压缩时间 |
除此之外还有跨目录的压缩命令:(注意:压缩文件夹名称中不能有空格!)
$ cd ~/tmp
$ for file in $(ls); do zip -r -q ~/other/$file.zip $file; done
其中~/other/
是要压缩到的路径,其他部分与同路径压缩方法相同。
这里之所以没有使用以下方法:(注意:压缩文件夹名称中不能有空格!)
$ for file in $(ls); do zip -r -q ~/other/$file.zip ~/tmp/$file; done
是因为不跳转到被压缩文件夹的路径,而是直接输入,会连同压缩文件夹前的路径一并压缩,造成压缩文件内部结构复杂。