61阅读

linux文件夹打包压缩-Linux下压缩某个文件夹(文件夹打包)

发布时间:2017-10-28 所属栏目:文件夹怎么压缩打包

一 : Linux下压缩某个文件夹(文件夹打包)

tar -zcvf /home/xahot.tar.gz /xahot
tar -zcvf 打包后生成的文件名全路径 要打包的目录
例子:把/xahot文件夹打[www.61k.com]包后生成1个/home/xahot.tar.gz的文件。
zip 压缩方法:

压缩当前的文件夹 zip -r ./xahot.zip ./* -r表示递归
zip [参数] [打包后的文件名] [打包的目录路径]
解压 unzip xahot.zip 不解释
linux zip命令的基本用法是:

linux zip命令参数列表:

-a 将文件转成ASCII模式
-F 尝试修复损坏的压缩文件
-h 显示帮助界面
-m 将文件压缩之后,删除源文件

-n 特定字符串 不压缩具有特定字尾字符串的文件
-o 将压缩文件内的所有文件的最新变动时间设为压缩时候的时间
-q 安静模式,在压缩之际不显示指令的执行过程
-r 将指定的目录下的所有子目录以及文件一起处理
-S 包含系统文件和隐含文件(S是大写)
-t 日期 把压缩文件的最后修改日期设为指定的日期,日期格式为mmddyyyy

举例:

将/home/wwwroot/xahot/ 这个目录下所有文件和文件夹打包为当前目录下的xahot.zip

zip –q –r xahot.zip /home/wwwroot/xahot

上面的命令操作是将绝对地址的文件及文件夹进行压缩.以下给出压缩相对路径目录

比如目前在Bliux这个目录下,执行以下操作可以达到以上同样的效果.

zip –q –r xahot.zip xahot

比如现在我的xahot目录下,我操作的zip压缩命令是

zip –q –r xahot.zip *

以上是在安静模式下进行的,而且包含系统文件和隐含文件
//////////////////////////////////////////////////////////
unzip语 法:

unzip [-cflptuvz][-agCjLMnoqsVX][-P<密码>][.zip文件][文件][-d<目 录>][-x<文件>] 或 unzip [-Z]

补充说明:unzip为.zip压缩文件的解压缩程序。

unzip参 数:
-c 将解压缩的结果显示到屏幕上,并对字符做适当的转换。
-f 更新现有的文件。
-l 显示压缩文件内所包含的文件。
-p 与-c参数类似,会将解压缩的结果显示到屏幕上,但不会执行任何的转换。
-t 检查压缩文件是否正确。
-u 与-f参数类似,但是除了更新现有的文件外,也会将压缩文件中的其他文件解压缩到目录中。
-v 执行是时显示详细的信息。
-z 仅显示压缩文件的备注文字。
-a 对文本文件进行必要的字符转换。
-b 不要对文本文件进行字符转换。
-C 压缩文件中的文件名称区分大小写。
-j 不处理压缩文件中原有的目录路径。
-L 将压缩文件中的全部文件名改为小写。
-M 将输出结果送到more程序处理。
-n 解压缩时不要覆盖原有的文件。
-o 不必先询问用户,unzip执行后覆盖原有文件。
-P<密码> 使用zip的密码选项。
-q 执行时不显示任何信息。
-s 将文件名中的空白字符转换为底线字符。
-V 保留VMS的文件版本信息。
-X 解压缩时同时回存文件原来的UID/GID。
[.zip文件] 指定.zip压缩文件。
[文件] 指定要处理.zip压缩文件中的哪些文件。
-d<目录> 指定文件解压缩后所要存储的目录。
-x<文件> 指定不要处理.zip压缩文件中的哪些文件。
-Z unzip -Z等于执行zipinfo指令

举例:

将/home/wwwroot/xahot.zip解压到当前目录

unzip xahot.zip

如果出现这个提示:
-bash: zip: command not found 不能执行ZIP压缩,是因为没有安装ZIP,
运行下这条安装命令就可以yum install zip

二 : Linux 常见文件打包压缩命令

.tar

解包: tar xvf FileName.tar

打包:tar cvf FileName.tar DirName

(注:tar是打包,不是压缩!) 参数说明:

-c:建立新的存档

-x:从存档展开文件

-v:详细显示处理的文件;

-f:指定存档或设备

---------------------------------------------

.gz

解压1:gunzip FileName.gz

解压2:gzip -d FileName.gz

压缩:gzip FileName

.tar.gz 和 .tgz

解压:tar zxvf FileName.tar.gz

压缩:tar zcvf FileName.tar.gz DirName

参数说明: -z:用 gzip 对存档压缩或解压

---------------------------------------------

.bz2

解压1:bzip2 -d FileName.bz2

解压2:bunzip2 FileName.bz2

压缩: bzip2 -z FileName

.tar.bz2

解压:tar jxvf FileName.tar.bz2

压缩:tar jcvf FileName.tar.bz2 DirName

---------------------------------------------

.bz

解压1:bzip2 -d FileName.bz

解压2:bunzip2 FileName.bz

压缩:未知

.tar.bz

解压:tar jxvf FileName.tar.bz

压缩:未知

---------------------------------------------

.Z

解压:uncompress FileName.Z

压缩:compress FileName

.tar.Z

解压:tar Zxvf FileName.tar.Z

压缩:tar Zcvf FileName.tar.Z DirName

---------------------------------------------

.zip

解压:unzip FileName.zip

压缩:zip FileName.zip DirName

---------------------------------------------

.rar

解压:rar a FileName.rar

压缩:rar e FileName.rar

---------------------------------------------

.lha

解压:lha -e FileName.lha

压缩:lha -a FileName.lha FileName

---------------------------------------------

.rpm

解包:rpm2cpio FileName.rpm | cpio -div

---------------------------------------------

.deb

解包:ar p FileName.deb data.tar.gz | tar zxf -

---------------------------------------------

三 : C#使用ICSharpCode.SharpZipLib.dll压缩文件夹和文件

C#使用ICSharpCode.SharpZipLib.dll压缩文件夹和文件

大家可以到http://www.61k.comopensource/sharpziplib/下载SharpZiplib的最新版本,本文使用的版本为0.86.0.518,支持Zip, GZip, BZip2 和Tar格式,其实没啥好说的直接上代码

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

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

/// <summary>

/// Zip压缩与解压缩

/// </summary>

publicclassZipHelper

{

/// <summary>

/// 压缩单个文件

/// </summary>

/// <param name="fileToZip">要压缩的文件</param>

/// <param name="zipedFile">压缩后的文件</param>

/// <param name="compressionLevel">压缩等级</param>

/// <param name="blockSize">每次写入大小</param>

publicstaticvoidZipFile(stringfileToZip, stringzipedFile, intcompressionLevel, intblockSize)

{

//如果文件没有找到,则报错

if(!System.IO.File.Exists(fileToZip))

{

thrownewSystem.IO.FileNotFoundException("指定要压缩的文件: "+ fileToZip + " 不存在!");

}

using(System.IO.FileStream ZipFile = System.IO.File.Create(zipedFile))

{

using(ZipOutputStream ZipStream = newZipOutputStream(ZipFile))

{

using(System.IO.FileStream StreamToZip = newSystem.IO.FileStream(fileToZip, System.IO.FileMode.Open, System.IO.FileAccess.Read))

{

stringfileName = fileToZip.Substring(fileToZip.LastIndexOf("\\") + 1);

ZipEntry ZipEntry = newZipEntry(fileName);

ZipStream.PutNextEntry(ZipEntry);

ZipStream.SetLevel(compressionLevel);

byte[] buffer = newbyte[blockSize];

intsizeRead = 0;

try

{

do

{

sizeRead = StreamToZip.Read(buffer, 0, buffer.Length);

ZipStream.Write(buffer, 0, sizeRead);

}

while(sizeRead > 0);

}

catch(System.Exception ex)

{

throwex;

}

StreamToZip.Close();

}

ZipStream.Finish();

ZipStream.Close();

}

ZipFile.Close();

}

}

/// <summary>

/// 压缩单个文件

/// </summary>

/// <param name="fileToZip">要进行压缩的文件名</param>

/// <param name="zipedFile">压缩后生成的压缩文件名</param>

publicstaticvoidZipFile(stringfileToZip, stringzipedFile)

{

//如果文件没有找到,则报错

if(!File.Exists(fileToZip))

{

thrownewSystem.IO.FileNotFoundException("指定要压缩的文件: "+ fileToZip + " 不存在!");

}

using(FileStream fs = File.OpenRead(fileToZip))

{

byte[] buffer = newbyte[fs.Length];

fs.Read(buffer, 0, buffer.Length);

fs.Close();

using(FileStream ZipFile = File.Create(zipedFile))

{

using(ZipOutputStream ZipStream = newZipOutputStream(ZipFile))

{

stringfileName = fileToZip.Substring(fileToZip.LastIndexOf("\\") + 1);

ZipEntry ZipEntry = newZipEntry(fileName);

ZipStream.PutNextEntry(ZipEntry);

ZipStream.SetLevel(5);

ZipStream.Write(buffer, 0, buffer.Length);

ZipStream.Finish();

ZipStream.Close();

}

}

}

}

/// <summary>

/// 压缩多层目录

/// </summary>

/// <param name="strDirectory">The directory.</param>

/// <param name="zipedFile">The ziped file.</param>

publicstaticvoidZipFileDirectory(stringstrDirectory, stringzipedFile)

{

using(System.IO.FileStream ZipFile = System.IO.File.Create(zipedFile))

{

using(ZipOutputStream s = newZipOutputStream(ZipFile))

{

ZipSetp(strDirectory, s, "");

}

}

}

/// <summary>

/// 递归遍历目录

/// </summary>

/// <param name="strDirectory">The directory.</param>

/// <param name="s">The ZipOutputStream Object.</param>

/// <param name="parentPath">The parent path.</param>

privatestaticvoidZipSetp(stringstrDirectory, ZipOutputStream s, stringparentPath)

{

if(strDirectory[strDirectory.Length - 1] != Path.DirectorySeparatorChar)

{

strDirectory += Path.DirectorySeparatorChar;

}

Crc32 crc = newCrc32();

string[] filenames = Directory.GetFileSystemEntries(strDirectory);

foreach(stringfile infilenames)// 遍历所有的文件和目录

{

if(Directory.Exists(file))// 先当作目录处理如果存在这个目录就递归Copy该目录下面的文件

{

stringpPath = parentPath;

pPath += file.Substring(file.LastIndexOf("\\") + 1);

pPath += "\\";

ZipSetp(file, s, pPath);

}

else// 否则直接压缩文件

{

//打开压缩文件

using(FileStream fs = File.OpenRead(file))

{

byte[] buffer = newbyte[fs.Length];

fs.Read(buffer, 0, buffer.Length);

stringfileName = parentPath + file.Substring(file.LastIndexOf("\\") + 1);

ZipEntry entry = newZipEntry(fileName);

entry.DateTime = DateTime.Now;

entry.Size = fs.Length;

fs.Close();

crc.Reset();

crc.Update(buffer);

entry.Crc = crc.Value;

s.PutNextEntry(entry);

s.Write(buffer, 0, buffer.Length);

}

}

}

}

/// <summary>

/// 解压缩一个 zip 文件。

/// </summary>

/// <param name="zipedFile">The ziped file.</param>

/// <param name="strDirectory">The STR directory.</param>

/// <param name="password">zip 文件的密码。</param>

/// <param name="overWrite">是否覆盖已存在的文件。</param>

publicvoidUnZip(stringzipedFile, stringstrDirectory, stringpassword, booloverWrite)

{

if(strDirectory == "")

strDirectory = Directory.GetCurrentDirectory();

if(!strDirectory.EndsWith("\\"))

strDirectory = strDirectory + "\\";

using(ZipInputStream s = newZipInputStream(File.OpenRead(zipedFile)))

{

s.Password = password;

ZipEntry theEntry;

while((theEntry = s.GetNextEntry()) != null)

{

stringdirectoryName = "";

stringpathToZip = "";

pathToZip = theEntry.Name;

if(pathToZip != "")

directoryName = Path.GetDirectoryName(pathToZip) + "\\";

stringfileName = Path.GetFileName(pathToZip);

Directory.CreateDirectory(strDirectory + directoryName);

if(fileName != "")

{

if((File.Exists(strDirectory + directoryName + fileName) && overWrite) || (!File.Exists(strDirectory + directoryName + fileName)))

{

using(FileStream streamWriter = File.Create(strDirectory + directoryName + fileName))

{

intsize = 2048;

byte[] data = newbyte[2048];

while(true)

{

size = s.Read(data, 0, data.Length);

if(size > 0)

streamWriter.Write(data, 0, size);

else

break;

}

streamWriter.Close();

}

}

}

}

s.Close();

}

}

}

代码来自网络,略作修改,修改为静态方法,修改文件夹递归压缩时的bug..

四 : C#使用ICSharpCode.SharpZipLib.dll压缩文件夹和文件

大家可以到http://www.icsharpcode.net/opensource/sharpziplib/下载SharpZiplib的最新版本,本文使用的版本为0.86.0.518,支持Zip, GZip, BZip2 和Tar格式,其实没啥好说的直接上代码

/// <summary>  /// Zip压缩与解压缩 /// </summary>  public class ZipHelper  {  /// <summary>  /// 压缩单个文件  /// </summary>  /// <param name="fileToZip">要压缩的文件</param>  /// <param name="zipedFile">压缩后的文件</param>  /// <param name="compressionLevel">压缩等级</param>  /// <param name="blockSize">每次写入大小</param>  public static void ZipFile(string fileToZip, string zipedFile, int compressionLevel, int blockSize)  {  //如果文件没有找到,则报错  if (!System.IO.File.Exists(fileToZip))  {  throw new System.IO.FileNotFoundException("指定要压缩的文件: " + fileToZip + " 不存在!");  }  using (System.IO.FileStream ZipFile = System.IO.File.Create(zipedFile))  {  using (ZipOutputStream ZipStream = new ZipOutputStream(ZipFile))  {  using (System.IO.FileStream StreamToZip = new System.IO.FileStream(fileToZip, System.IO.FileMode.Open, System.IO.FileAccess.Read))  {  string fileName = fileToZip.Substring(fileToZip.LastIndexOf("\\") + 1);  ZipEntry ZipEntry = new ZipEntry(fileName);  ZipStream.PutNextEntry(ZipEntry);  ZipStream.SetLevel(compressionLevel);  byte[] buffer = new byte[blockSize];  int sizeRead = 0;  try  {  do  {  sizeRead = StreamToZip.Read(buffer, 0, buffer.Length);  ZipStream.Write(buffer, 0, sizeRead);  }  while (sizeRead > 0);  }  catch (System.Exception ex)  {  throw ex;  }  StreamToZip.Close();  }  ZipStream.Finish();  ZipStream.Close();  }  ZipFile.Close();  }  }  /// <summary>  /// 压缩单个文件  /// </summary>  /// <param name="fileToZip">要进行压缩的文件名</param>  /// <param name="zipedFile">压缩后生成的压缩文件名</param>  public static void ZipFile(string fileToZip, string zipedFile)  {  //如果文件没有找到,则报错  if (!File.Exists(fileToZip))  {  throw new System.IO.FileNotFoundException("指定要压缩的文件: " + fileToZip + " 不存在!");  }  using (FileStream fs = File.OpenRead(fileToZip))  {  byte[] buffer = new byte[fs.Length];  fs.Read(buffer, 0, buffer.Length);  fs.Close();  using (FileStream ZipFile = File.Create(zipedFile))  {  using (ZipOutputStream ZipStream = new ZipOutputStream(ZipFile))  {  string fileName = fileToZip.Substring(fileToZip.LastIndexOf("\\") + 1);  ZipEntry ZipEntry = new ZipEntry(fileName);  ZipStream.PutNextEntry(ZipEntry);  ZipStream.SetLevel(5);  ZipStream.Write(buffer, 0, buffer.Length);  ZipStream.Finish();  ZipStream.Close();  }  }  }  }  /// <summary>  /// 压缩多层目录  /// </summary>  /// <param name="strDirectory">The directory.</param>  /// <param name="zipedFile">The ziped file.</param>  public static void ZipFileDirectory(string strDirectory, string zipedFile)  {  using (System.IO.FileStream ZipFile = System.IO.File.Create(zipedFile))  {  using (ZipOutputStream s = new ZipOutputStream(ZipFile))  {  ZipSetp(strDirectory, s, "");  }  }  }  /// <summary>  /// 递归遍历目录  /// </summary>  /// <param name="strDirectory">The directory.</param>  /// <param name="s">The ZipOutputStream Object.</param>  /// <param name="parentPath">The parent path.</param>  private static void ZipSetp(string strDirectory, ZipOutputStream s, string parentPath)  {  if (strDirectory[strDirectory.Length - 1] != Path.DirectorySeparatorChar)  {  strDirectory += Path.DirectorySeparatorChar;  } Crc32 crc = new Crc32();  string[] filenames = Directory.GetFileSystemEntries(strDirectory);  foreach (string file in filenames)// 遍历所有的文件和目录  {  if (Directory.Exists(file))// 先当作目录处理如果存在这个目录就递归Copy该目录下面的文件  {  string pPath = parentPath;  pPath += file.Substring(file.LastIndexOf("\\") + 1);  pPath += "\\";  ZipSetp(file, s, pPath);  }  else // 否则直接压缩文件  {  //打开压缩文件  using (FileStream fs = File.OpenRead(file))  {  byte[] buffer = new byte[fs.Length];  fs.Read(buffer, 0, buffer.Length);  string fileName = parentPath + file.Substring(file.LastIndexOf("\\") + 1);  ZipEntry entry = new ZipEntry(fileName);  entry.DateTime = DateTime.Now;  entry.Size = fs.Length;  fs.Close();  crc.Reset();  crc.Update(buffer);  entry.Crc = crc.Value;  s.PutNextEntry(entry);  s.Write(buffer, 0, buffer.Length);  }  }  }  }  /// <summary>  /// 解压缩一个 zip 文件。(www.61k.com)  /// </summary>  /// <param name="zipedFile">The ziped file.</param>  /// <param name="strDirectory">The STR directory.</param>  /// <param name="password">zip 文件的密码。</param>  /// <param name="overWrite">是否覆盖已存在的文件。</param>  public void UnZip(string zipedFile, string strDirectory, string password, bool overWrite)  {  if (strDirectory == "")  strDirectory = Directory.GetCurrentDirectory();  if (!strDirectory.EndsWith("\\"))  strDirectory = strDirectory + "\\";  using (ZipInputStream s = new ZipInputStream(File.OpenRead(zipedFile)))  {  s.Password = password;  ZipEntry theEntry;  while ((theEntry = s.GetNextEntry()) != null)  {  string directoryName = "";  string pathToZip = "";  pathToZip = theEntry.Name;  if (pathToZip != "")  directoryName = Path.GetDirectoryName(pathToZip) + "\\";  string fileName = Path.GetFileName(pathToZip);  Directory.CreateDirectory(strDirectory + directoryName);  if (fileName != "")  {  if ((File.Exists(strDirectory + directoryName + fileName) && overWrite) || (!File.Exists(strDirectory + directoryName + fileName)))  {  using (FileStream streamWriter = File.Create(strDirectory + directoryName + fileName))  {  int size = 2048;  byte[] data = new byte[2048];  while (true)  {  size = s.Read(data, 0, data.Length);  if (size > 0)  streamWriter.Write(data, 0, size);  else  break;  }  streamWriter.Close();  }  }  }  }  s.Close();  }  }  }

扩展:c语言 / c站 / cf

代码来自网络,略作修改,修改为静态方法,修改文件夹递归压缩时的bug..

扩展:c语言 / c站 / cf

五 : 在Linux下打包tar文件时添加密码的方法

在当前目录下有一个pma目录的文件夹:

1、使用tar对文件压缩加密:

# tar -zcvf - pma|openssl des3 -salt -k password | dd of=pma.des3


完成将得到一个pma.des3的打包文件,用你设置的密码替换password。

2、使用tar对加密文件解压:

# dd if=pma.des3 |openssl des3 -d -k password|tar zxf -


注意:命令最后有”-”,它将释放所有的文件。其中-k password可以不使用,这样执行完命令后会提示你输入密码,加上-k参数表示在程序中自动验证密码。
201573171856012.jpg (750×466)

本文标题:linux文件夹打包压缩-Linux下压缩某个文件夹(文件夹打包)
本文地址: http://www.61k.com/1084479.html

61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1