Linux下的zip命令的使用
参考资料:http://no001.blog.51cto.com/1142339/547862
# zip -P 123456 test.zip test.txt
-P 123456 是加密密码(-P必须用大写,否则无效!!)
test.zip 是生成的压缩文件
test.txt 是被压缩的文件
zip [参数] <压缩包> <源文件>
使用zip格式打包文件
-r 递归,将指定目录下的所有文件和子目录一并处理
-S 包含系统和隐藏文件
-y 直接保存符号连接,而非该连接所指向的文件
-X 不保存额外的文件属性
-m 将文件压缩并加入压缩文件后,删除源文件
-<压缩级别> 1~9,数字越大,压缩率越高
-F 尝试修复已损坏的压缩文件
-T 检查备份文件内的每个文件是否正确无误
-q 不显示指令执行过程
-g 将文件压缩后附加在既有的压缩文件之后,而非另行建立新的压缩文件
-u 更新压缩包内文件
-f 更新压缩包内文件。如果符合条件的文件没有包含在压缩包中,则压缩后添加
-$ 保存第一个被压缩文件所在磁盘的卷标
-j 只保存文件名称及其内容
-D 压缩文件内不建立目录名称
-i <表达式> 压缩目录时,只压缩符合条件的文件
-x <表达式> 排除符合条件的文件
-n <文件名后缀> 排除指定文件名后缀的文件(不压缩具有特定字尾字符串的文件)
-b <缓存路径> 指定临时文件目录
-d <表达式> 从压缩文件内删除指定的文件
-t <日期时间> 把压缩文件的日期设成指定的日期
-o 以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该文件相同
-A 调整可执行的自动解压缩文件
-c 替每个被压缩的文件加上注释
-z 替压缩文件加上注释
-k 使用MS-DOS兼容格式的文件名称。
-l 压缩文件时,把LF字符置换成LF+CR字符。
-ll 压缩文件时,把LF+CR字符置换成LF字符。
unzip [参数] <压缩文件> [压缩包中将被释放的文件]
解压zip压缩包文件
-P <密码> zip压缩包的密码
-d <路径> 指定解压路径
-n 解压缩时不覆盖原有文件
-f 覆盖原有文件
-o 不经询问,直接覆盖原有文件
-u 覆盖原有文件,并将压缩文件中的其他文件解压缩到目录中
-l 显示压缩文件内所包含的文件
-t 检查压缩文件是否正确
-z 显示压缩包注释
-Z unzip -Z等于执行zipinfo指令
-j 不处理压缩文件中原有的目录路径
-C 压缩文件中的文件名称区分大小写
-L 将压缩文件中的全部文件名改为小写
-s 将文件名中的空格转换下划线
-X 解压缩时保留文件原来的UID/GID
-q 执行时不显示任何信息
-v 执行是时显示详细的信息
-c 将解压缩的结果显示到屏幕上,并对字符做适当的转换
-p 与-c参数类似,会将解压缩的结果显示到屏幕上,但不会执行任何的转换
-a 对文本文件进行必要的字符转换
-b 不要对文本文件进行字符转换
-x <表达式> 处理里排除压缩包中的指定文件
-M 将输出结果送到more程序处理
相关命令行(环境:Mac OS 10.7.2 Lion, eclipse):
package org.bruce.file.handle.config; /** * @author Bruce Yang * zip 命令不支持 -I, -S 参数~ */ public interface IZipCompleteCmd { // 将当前目录下的所有文件盒文件夹全部压缩成 myFile.zip 文件,-r表示递归压缩子目录下所有文件~ public final String _zipCurrentDir = "zip -r /Users/user/Desktop/Desktop.zip /Users/user/Desktop/*"; // 递归,密码~ public final String _zipWithPwd = "zip -r -P 12345 /Users/user/Desktop/Desktop.zip /Users/user/Desktop/*"; // 删除 zip 压缩包里面特定格式的文件~ public final String _zipDeleteSpecifiedFormatFiles = "zip -d /Users/user/Desktop/Y3wFramework.zip *.java"; // 删除 zip 压缩包里面特定格式的文件(正则匹配)~ /** 注释:?表示一个字符,如果用 * 表示任意多个字符 */ public final String _zipDeleteSpecifiedFormatFiles2 = "zip -d /Users/user/Desktop/Y3wFramework.zip *.j?va"; // 你可以使用 zip 命令同时处理多个文件和目录,方法是将它们逐一列出,并用空格间隔: public final String _zipMutilpeFilesOrDirs = "zip -r filename.zip file1 file2 file3 /Users/user/Desktop/test"; // 我有一个很大的压缩文件large.zip,我不想解压缩,只想看看它里面有什么: public final String _unzipPreivewLargeZip = "unzip -v /Users/user/Desktop/Y3wFramework.zip"; /** * 我用-v选项发现music.zip压缩文件里面有很多目录和子目录,并且子目录中其实都是歌曲mp3文件, * 我想把这些文件都下载到第一级目录,而不是一层一层建目录: * 注意:不可胡乱执行,到时候满屏的文件~~ */ public final String _unzipReconstructZipStructure = "unzip -j /Users/user/Desktop/123/Y3wFramework.zip"; // 我下载了一个压缩文件large.zip,想验证一下这个压缩文件是否下载完全了 public final String _unzipTestDownloadCompleted = "unzip -t /Users/user/Desktop/Y3wFramework.zip"; }
package org.bruce.file.handle.config; /** * @author Bruce Yang~ * 配置采用哪种备份方案~ */ public interface IBakupHelper { public enum Solution { CopyWithJava, CopyWithTerminal, ZipWithJava, ZipWithTerminal, }; // public final Solution CHOICE = Solution.CopyWithJava; // public final Solution CHOICE = Solution.CopyWithTerminal; // public final Solution CHOICE = Solution.ZipWithJava; public final Solution CHOICE = Solution.ZipWithTerminal; // 递归~ public final String _zipRecursively = "zip -r "; // 递归,删除源文件~ public final String _zipRemoveSource = "zip -r -m "; // 递归,不显示指令执行过程~ public final String _zipQuietly = "zip -r -q "; // -n <文件名后缀> 排除指定文件名后缀的文件(不压缩 而非 排除在压缩包外) // 适用于单个筛选,多个怎么弄?麻痹的终于试出来了,连接符要用 “:” // 如果以 : 结尾的话,会导致所有的文件都不被压缩(可能是因为""任何字符串的原因)~ public final String _zipIncludeButDontCompress = "zip -r -n .project:txt:pdf:prefs:classpath:sql:mid:.wav:.properties "; /** 要注意区分表达式和文件名后缀的区别!! -x 表示不将某些文件置入压缩包! */ public final String _zipExcludeDirectly = "zip -x *.java *.class *.jar *.wav *.mp3 *.mid -q -r "; // -<压缩级别> 1~9,数字越大,压缩率越高 public final String _zipLargest = "zip -r -1 "; public final String _zipSmallest = "zip -r -9 "; // 查看压缩包的内容列表~ public final String _unzipEcho = "unzip -v "; // 作用未知,能够正常执行,不知有何玄妙~ public final String _zipWithoutDirStruct = "zip -D -r "; public String _zipCmdCurrentUsed = _zipQuietly; }