Linux 系統常見的壓縮指令
compress、zip、gzip、bzip2、xz 这些指令仅能对单个文档来压缩和解压,所以当需要操作多个文档时就需要打包工具 tar 。
目前 Windows 的 WinRAR 也支持 .tar.gz 等文档名的解压。
压缩效果对比:
(xz是最好但耗时最高,不举例),从时间成本考量,最理想的是gzip。
tar命令详解
-c: 建立压缩档案
-x:解压
-t:查看内容
-r:向压缩归档文件末尾追加文件
-u:更新原压缩包中的文件
这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。
下面的参数是根据需要在压缩或解压档案时可选的。
-z:有gzip属性的
-j:有bz2属性的
-Z:有compress属性的
-v:显示所有过程
-O:将文件解开到标准输出
-C 目录 :这个选项用在压缩/解压缩,若要在特定目录压缩/解压缩,可以使用这个选择。(改变工作目录)
参数-f是必须的
-f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。
# tar -cf all.tar *.jpg 这条命令是将所有.jpg的文件打成一个名为all.tar的包。-c是表示产生新的包,-f指定包的文件名。
# tar -rf all.tar *.gif 这条命令是将所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的意思。
# tar -uf all.tar logo.gif 这条命令是更新原来tar包all.tar中logo.gif文件,-u是表示更新文件的意思。
# tar -tf all.tar 这条命令是列出all.tar包中所有文件,-t是列出文件的意思
# tar -xf all.tar 这条命令是解出all.tar包中所有文件,-x是解开的意思
查看
tar -tf aaa.tar.gz 在不解压的情况下查看压缩包的内容
压缩
tar –cvf jpg.tar *.jpg //将目录里所有jpg文件打包成jpg.tar
tar –czf jpg.tar.gz *.jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用gzip压缩,生成一个gzip压缩过的包,命名为jpg.tar.gz
tar –cjf jpg.tar.bz2 *.jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用bzip2压缩,生成一个bzip2压缩过的包,命名为jpg.tar.bz2
tar –cZf jpg.tar.Z *.jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用compress压缩,生成一个umcompress压缩过的包,命名为jpg.tar.Z
解压
tar –xvf file.tar //解压 tar包
tar -xzvf file.tar.gz //解压tar.gz
tar -xjvf file.tar.bz2 //解压 tar.bz2tar –xZvf file.tar.Z //解压tar.Z
总结
1、*.tar 用 tar –xvf 解压
2、*.gz 用 gzip -d或者gunzip 解压
3、*.tar.gz和*.tgz 用 tar –xzf 解压
4、*.bz2 用 bzip2 -d或者用bunzip2 解压
5、*.tar.bz2用tar –xjf 解压
6、*.Z 用 uncompress 解压
7、*.tar.Z 用tar –xZf 解压
问题:在/home/usr1目录下,想要打包/home/usr2目录中的文件file2,应该使用什么样的tar命令?
解答1:
$ tar -cvf file2.tar /home/usr2/file2
tar: Removing leading '/' from members names
home/usr2/file2
该命令可以将/home/usr2/file2文件打包到当前目录下的file2.tar中,需要注意的是:使用绝对路径标识的源文件,在用tar命令压缩后,文件名连同绝对路径(这里是home/usr2/,根目录'/'被自动去掉了)一并被压缩进来。使用tar命令解压缩后会出现以下情况:
$ tar -xvf file2.tar
$ ls
…… …… home …… ……
解压缩后的文件名不是想象中的file2,而是home/usr2/file2。
解答2:
$ tar -cvf file2.tar -C /home/usr2 file2
该命令中的-C dir参数,将tar的工作目录从当前目录改为/home/usr2,将file2文件(不带绝对路径)压缩到file2.tar中。注意:-C dir参数的作用在于改变工作目录,其有效期为该命令中下一次-C dir参数之前。
使用tar的-C dir参数,同样可以做到在当前目录/home/usr1下将文件解压缩到其他目录,例如:
$ tar -xvf file2.tar -C /home/usr2
而tar不用-C dir参数时是无法做到的:
$ tar -xvf file2.tar /home/usr2
tar: /tmp/file: Not found in archive
tar: Error exit delayed from previous errors
tar ftp:
交叉编译:export CC=arm-linux-gnueabihf-gcc
./configure --host=arm-linux-gnueabihf
make
(make install)
tar 执行依赖libacl.so.1libacl.so.1.rar
bzip2-1.0.6.zip
交叉编译:Makefile 里改GCC ,./make
bzip执行依赖libbz2.so.0libbz2.so.0.rar
///////////////////////////////////////////
ncompress-4.2.4.4.zip
交叉编译:./build 在命令行选择改GCC
若报错,compress42.c:175: error: conflicting types for 'open'
compress42.c:175: note: a parameter list with an ellipsis can't match an empty parameter name list declaration
..................
修改compress42.c:175 - extern int open LARGS((char const *,int,...));
+ extern int open (__const char *__file, int __oflag, ...);
///////////////////////////////
zip30.zip
unzip60.zip
交叉编译:改zip30/unix/Makefile 里GCC ,make -f unix/Makefile generic
改unzip60/unix/Makefile 里GCC ,make -f unix/Makefile generic
阅读(2666) | 评论(0) | 转发(0) |