- 论坛徽章:
- 0
|
cpio -covB > [file|device] --------备份
cpio -icduv /dev/st0
# 一般来说,使用 SCSI 介面的磁带机,代号是 /dev/st0 喔!
范例二:检查磁带机上面有什么文件?
[root@linux ~]# cpio -icdvt /tmp/content
# 第一个动作当中,会将磁带机内的档名列出到萤幕上面,而我们可以透过第二个动作,
# 将所有的档名通通纪录到 /tmp/content 文件去!
范例三:将磁带上的资料还原回来~
[root@linux ~]# cpio -icduv /root/etc.cpio
# 这样就能够备份啰~您也可以将资料以 cpio -i > cat example
test2
this is test1
shell>> cut -c0-6 example ## print 开头算起前 6 个字元
test2
this i
cut其实很有用
-c m-n 表示显示每一行的第m个字元到第n个字元。例如:
gxy@gxy-desktop:~/saved$ cat file
liubi 23 14000
gxy@gxy-desktop:~/saved$ cut -f 1,3 file
liubi 23 14000
gxy@gxy-desktop:~/saved$ cut -f 1,3 -d ' ' file
liubi 14000
gxy@gxy-desktop:~/saved$ cut -f 1-3 -d ' ' file
liubi 23 14000
gxy@gxy-desktop:~/saved$ cut -f 1 -d ' ' file
liubi
gxy@gxy-desktop:~/saved$ cut -f3 -d ' ' file
14000
命令用法:
cut -b list [-n] [file ...]
cut -c list [file ...]
cut -f list [-d delim][-s][file ...]
l 上面的-b、-c、-f分别表示字节、字符、字段(即byte、character、field);
l list表示-b、-c、-f操作范围,-n常常表示具体数字;
l file表示的自然是要操作的文本文件的名称;
l delim(英文全写:delimiter)表示分隔符,默认情况下为TAB;
l -s表示不包括那些不含分隔符的行(这样有利于去掉注释和标题)
上面三种方式中,表示从指定的范围中提取字节(-b)、或字符(-c)、或字段(-f)。
范围的表示方法:
N
只有第N项
N-
从第N项一直到行尾
N-M
从第N项到第M项(包括M)
-M
从一行的开始到第M项(包括M)
-
从一行的开始到结束的所有项
scp `find . -name "*.ko"` dest
ssh user@some.remotehost.com 'find /source/dir -name "*.pdf" -print0 | xargs -0 -J % scp % user@another.host.com:/dest/dir'
Everything after this looks like it was supposed to be part of a find command! Here's the problem: the -exec option sucks. Use -print0 and xargs -0. (This basically directs find to spit out a null-delimited list of files, and the -0 option to xargs directs it to expect a null-delimited list of files.)
Further, are you copying a bunch of stuff back to your computer? Rather than making new connections via scp, just send yourself a tarball.
find . -name "*.ko" |xargs -i scp {} 172.27.1.161:/root
转载 Linux文件查找命令find,xargs详述收藏
新一篇: Linux排序命令sort详解 | 旧一篇: Shell中的引号,反引号,双引号,反斜杠
前言:关于find命令
一、find 命令格式
1、find命令的一般形式为;
2、find命令的参数;
3、find命令选项;
4、使用exec或ok来执行shell命令;
二、find命令的例子;
1、查找当前用户主目录下的所有文件;
2、为了在当前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件;
3、为了查找系统中所有文件长度为0的普通文件,并列出它们的完整路径;
4、查找/var/logs目录中更改时间在7日以前的普通文件,并在删除之前询问它们;
5、为了查找系统中所有属于root组的文件;
6、find命令将删除当目录中访问时间在7日以来、含有数字后缀的admin.log文件
7、为了查找当前文件系统中的所有目录并排序;
8、为了查找系统中所有的rmt磁带设备;
三、xargs
四、find 命令的参数;
1、使用name选项
2、用perm选项
3、忽略某个目录
4、使用find查找文件的时候怎么避开某个文件目录
5、使用user和nouser选项
6、使用group和nogroup选项
7、按照更改时间或访问时间等查找文件
8、查找比某个文件新或旧的文件
9、使用type选项
10、使用size选项
11、使用depth选项
12、使用mount选项
+++++++++++++++++++++++++++++++++++++++++++++++++
正文
+++++++++++++++++++++++++++++++++++++++++++++++++
前言:关于find命令
由于find具有强大的功能,所以它的选项也很多,其中大部分选项都值得我们花时间来了解一下。即使系统中含有网络文件系统( NFS),find命令在该文件系统中同样有效,只你具有相应的权限。
在运行一个非常消耗资源的find命令时,很多人都倾向于把它放在后台执行,因为遍历一个大的文件系统可能会花费很长的时间(这里是指30G字节以上的文件系统)。
一、find 命令格式
1、find命令的一般形式为;
find pathname -options [-print -exec -ok ...]
2、find命令的参数;
pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。
-print: find命令将匹配的文件输出到标准输出。
-exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' { } \;,注意{ }和\;之间的空格。
-ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。
3、find命令选项
-name
按照文件名查找文件。
-perm
按照文件权限来查找文件。
-prune
使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用-depth选项,那么-prune将被find命令忽略。
-user
按照文件属主来查找文件。
-group
按照文件所属的组来查找文件。
-mtime -n +n
按照文件的更改时间来查找文件, - n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前。find命令还有-atime和-ctime 选项,但它们都和-m time选项。
-nogroup
查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在。
-nouser
查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。
-newer file1 ! file2
查找更改时间比文件file1新但比文件file2旧的文件。
-type
查找某一类型的文件,诸如:
b - 块设备文件。
d - 目录。
c - 字符设备文件。
p - 管道文件。
l - 符号链接文件。
f - 普通文件。
-size n:[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计。
-depth:在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。
-fstype:查找位于某一类型文件系统中的文件,这些文件系统类型通常可以在配置文件/etc/fstab中找到,该配置文件中包含了本系统中有关文件系统的信息。
-mount:在查找文件时不跨越文件系统mount点。
-follow:如果find命令遇到符号链接文件,就跟踪至链接所指向的文件。
-cpio:对匹配的文件使用cpio命令,将这些文件备份到磁带设备中。
另外,下面三个的区别:
-amin n
查找系统中最后N分钟访问的文件
-atime n
查找系统中最后n*24小时访问的文件
-cmin n
查找系统中最后N分钟被改变文件状态的文件
-ctime n
查找系统中最后n*24小时被改变文件状态的文件
-mmin n
查找系统中最后N分钟被改变文件数据的文件
-mtime n
查找系统中最后n*24小时被改变文件数据的文件
4、使用exec或ok来执行shell命令
使用find时,只要把想要的操作写在一个文件里,就可以用exec来配合find查找,很方便的
在有些操作系统中只允许-exec选项执行诸如l s或ls -l这样的命令。大多数用户使用这一选项是为了查找旧文件并删除它们。建议在真正执行rm命令删除文件之前,最好先用ls命令看一下,确认它们是所要删除的文件。
exec选项后面跟随着所要执行的命令或脚本,然后是一对儿{ },一个空格和一个\,最后是一个分号。为了使用exec选项,必须要同时使用print选项。如果验证一下find命令,会发现该命令只输出从当前路径起的相对路径及文件名。
例如:为了用ls -l命令列出所匹配到的文件,可以把ls -l命令放在find命令的-exec选项中
# find . -type f -exec ls -l { } \;
-rw-r--r-- 1 root root 34928 2003-02-25 ./conf/httpd.conf
-rw-r--r-- 1 root root 12959 2003-02-25 ./conf/magic
-rw-r--r-- 1 root root 180 2003-02-25 ./conf.d/README
上面的例子中,find命令匹配到了当前目录下的所有普通文件,并在-exec选项中使用ls -l命令将它们列出。
在/logs目录中查找更改时间在5日以前的文件并删除它们:
$ find logs -type f -mtime +5 -exec rm { } \;
记住:在shell中用任何方式删除文件之前,应当先查看相应的文件,一定要小心!当使用诸如mv或rm命令时,可以使用-exec选项的安全模式。它将在对每个匹配到的文件进行操作之前提示你。
在下面的例子中, find命令在当前目录中查找所有文件名以.LOG结尾、更改时间在5日以上的文件,并删除它们,只不过在删除之前先给出提示。
$ find . -name "*.conf" -mtime +5 -ok rm { } \;
? n
按y键删除文件,按n键不删除。
任何形式的命令都可以在-exec选项中使用。
在下面的例子中我们使用grep命令。find命令首先匹配所有文件名为“ passwd*”的文件,例如passwd、passwd.old、passwd.bak,然后执行grep命令看看在这些文件中是否存在一个sam用户。
# find /etc -name "passwd*" -exec grep "sam" { } \;
sam:x:501:501::/usr/sam:/bin/bash
二、find命令的例子;
1、查找当前用户主目录下的所有文件:
下面两种方法都可以使用
$ find $HOME -print
$ find ~ -print
2、让当前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件;
$ find . -type f -perm 644 -exec ls -l { } \;
3、为了查找系统中所有文件长度为0的普通文件,并列出它们的完整路径;
$ find / -type f -size 0 -exec ls -l { } \;
4、查找/var/logs目录中更改时间在7日以前的普通文件,并在删除之前询问它们;
$ find /var/logs -type f -mtime +7 -ok rm { } \;
5、为了查找系统中所有属于root组的文件;
$find . -group root -exec ls -l { } \;
-rw-r--r-- 1 root root 595 10月 31 01:09 ./fie1
6、find命令将删除当目录中访问时间在7日以来、含有数字后缀的admin.log文件。
该命令只检查三位数字,所以相应文件的后缀不要超过999。先建几个admin.log*的文件 ,才能使用下面这个命令
$ find . -name "admin.log[0-9][0-9][0-9]" -atime -7 -ok
rm { } \;
? n
? n
? n
? n
7、为了查找当前文件系统中的所有目录并排序;
$ find . -type d | sort
8、为了查找系统中所有的rmt磁带设备;
$ find /dev/rmt -print
三、xargs
xargs - build and execute command lines from standard input
在使用find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一起使用。
find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。
在有些系统中,使用-exec选项会为处理每一个匹配到的文件而发起一个相应的进程,并非将匹配到的文件全部作为参数一次执行;这样在有些情况下就会出现进程过多,系统性能下降的问题,因而效率不高;
而使用xargs命令则只有一个进程。另外,在使用xargs命令时,究竟是一次获取所有的参数,还是分批取得参数,以及每一次获取参数的数目都会根据该命令的选项及系统内核中相应的可调参数来确定。
来看看xargs命令是如何同find命令一起使用的,并给出一些例子。
下面的例子查找系统中的每一个普通文件,然后使用xargs命令来测试它们分别属于哪类文件
#find . -type f -print | xargs file
./.kde/Autostart/Autorun.desktop: UTF-8 Unicode English text
./.kde/Autostart/.directory: ISO-8859 text\
......
在整个系统中查找内存信息转储文件(core dump) ,然后把结果保存到/tmp/core.log 文件中:
$ find / -name "core" -print | xargs echo "" >/tmp/core.log
上面这个执行太慢,我改成在当前目录下查找
#find . -name "file*" -print | xargs echo "" > /temp/core.log
# cat /temp/core.log
./file6
在当前目录下查找所有用户具有读、写和执行权限的文件,并收回相应的写权限:
# ls -l
drwxrwxrwx 2 sam adm 4096 10月 30 20:14 file6
-rwxrwxrwx 2 sam adm 0 10月 31 01:01 http3.conf
-rwxrwxrwx 2 sam adm 0 10月 31 01:01 httpd.conf
# find . -perm -7 -print | xargs chmod o-w
# ls -l
drwxrwxr-x 2 sam adm 4096 10月 30 20:14 file6
-rwxrwxr-x 2 sam adm 0 10月 31 01:01 http3.conf
-rwxrwxr-x 2 sam adm 0 10月 31 01:01 httpd.conf
用grep命令在所有的普通文件中搜索hostname这个词:
# find . -type f -print | xargs grep "hostname"
./httpd1.conf:# different IP addresses or hostnames and have them handled by the
./httpd1.conf:# VirtualHost: If you want to maintain multiple domains/hostnames
on your
用grep命令在当前目录下的所有普通文件中搜索hostnames这个词:
# find . -name \* -type f -print | xargs grep "hostnames"
./httpd1.conf:# different IP addresses or hostnames and have them handled by the
./httpd1.conf:# VirtualHost: If you want to maintain multiple domains/hostnames
on your
注意,在上面的例子中, \用来取消find命令中的*在shell中的特殊含义。
find命令配合使用exec和xargs可以使用户对所匹配到的文件执行几乎所有的命令。
四、find 命令的参数
下面是find一些常用参数的例子,有用到的时候查查就行了,像上面前几个贴子,都用到了其中的的一些参数,也可以用man或查看论坛里其它贴子有find的命令手册
1、使用name选项
文件名选项是find命令最常用的选项,要么单独使用该选项,要么和其他选项一起使用。
可以使用某种文件名模式来匹配文件,记住要用引号将文件名模式引起来。
不管当前路径是什么,如果想要在自己的根目录$HOME中查找文件名符合*.txt的文件,使用~作为 'pathname'参数,波浪号~代表了你的$HOME目录。
$ find ~ -name "*.txt" -print
想要在当前目录及子目录中查找所有的‘ *.txt’文件,可以用:
$ find . -name "*.txt" -print
想要的当前目录及子目录中查找文件名以一个大写字母开头的文件,可以用:
$ find . -name "[A-Z]*" -print
想要在/etc目录中查找文件名以host开头的文件,可以用:
$ find /etc -name "host*" -print
想要查找$HOME目录中的文件,可以用:
$ find ~ -name "*" -print 或find . -print
要想让系统高负荷运行,就从根目录开始查找所有的文件。
$ find / -name "*" -print
如果想在当前目录查找文件名以两个小写字母开头,跟着是两个数字,最后是.txt的文件,下面的命令就能够返回名为ax37.txt的文件:
$find . -name "[a-z][a-z][0--9][0--9].txt" -print
2、用perm选项
按照文件权限模式用-perm选项,按文件权限模式来查找文件的话。最好使用八进制的权限表示法。
如在当前目录下查找文件权限位为755的文件,即文件属主可以读、写、执行,其他用户可以读、执行的文件,可以用:
$ find . -perm 755 -print
还有一种表达方法:在八进制数字前面要加一个横杠-,表示都匹配,如-007就相当于777,-006相当于666
# ls -l
-rwxrwxr-x 2 sam adm 0 10月 31 01:01 http3.conf
-rw-rw-rw- 1 sam adm 34890 10月 31 00:57 httpd1.conf
-rwxrwxr-x 2 sam adm 0 10月 31 01:01 httpd.conf
drw-rw-rw- 2 gem group 4096 10月 26 19:48 sam
-rw-rw-rw- 1 root root 2792 10月 31 20:19 temp
# find . -perm 006
# find . -perm -006
./sam
./httpd1.conf
./temp
-perm mode:文件许可正好符合mode
-perm +mode:文件许可部分符合mode
-perm -mode: 文件许可完全符合mode
3、忽略某个目录
如果在查找文件时希望忽略某个目录,因为你知道那个目录中没有你所要查找的文件,那么可以使用-prune选项来指出需要忽略的目录。在使用-prune选项时要当心,因为如果你同时使用了-depth选项,那么-prune选项就会被find命令忽略。
如果希望在/apps目录下查找文件,但不希望在/apps/bin目录下查找,可以用:
$ find /apps -path "/apps/bin" -prune -o -print
4、使用find查找文件的时候怎么避开某个文件目录
比如要在/usr/sam目录下查找不在dir1子目录之内的所有文件
find /usr/sam -path "/usr/sam/dir1" -prune -o -print
find [-path ..] [expression] 在路径列表的后面的是表达式
-path "/usr/sam" -prune -o -print 是 -path "/usr/sam" -a -prune -o
-print 的简写表达式按顺序求值, -a 和 -o 都是短路求值,与 shell 的 && 和 || 类似如果 -path "/usr/sam" 为真,则求值 -prune , -prune 返回真,与逻辑表达式为真;否则不求值 -prune,与逻辑表达式为假。如果 -path "/usr/sam" -a -prune 为假,则求值 -print ,-print返回真,或逻辑表达式为真;否则不求值 -print,或逻辑表达式为真。
这个表达式组合特例可以用伪码写为
if -path "/usr/sam" then
-prune
else
-print
避开多个文件夹
find /usr/sam \( -path /usr/sam/dir1 -o -path /usr/sam/file1 \) -prune -o -print
圆括号表示表达式的结合。
\ 表示引用,即指示 shell 不对后面的字符作特殊解释,而留给 find 命令去解释其意义。
查找某一确定文件,-name等选项加在-o 之后
#find /usr/sam \(-path /usr/sam/dir1 -o -path /usr/sam/file1 \) -prune -o -name "temp" -print
5、使用user和nouser选项
按文件属主查找文件,如在$HOME目录中查找文件属主为sam的文件,可以用:
$ find ~ -user sam -print
在/etc目录下查找文件属主为uucp的文件:
$ find /etc -user uucp -print
为了查找属主帐户已经被删除的文件,可以使用-nouser选项。这样就能够找到那些属主在/etc/passwd文件中没有有效帐户的文件。在使用-nouser选项时,不必给出用户名; find命令能够为你完成相应的工作。
例如,希望在/home目录下查找所有的这类文件,可以用:
$ find /home -nouser -print
6、使用group和nogroup选项
就像user和nouser选项一样,针对文件所属于的用户组, find命令也具有同样的选项,为了在/apps目录下查找属于gem用户组的文件,可以用:
$ find /apps -group gem -print
要查找没有有效所属用户组的所有文件,可以使用nogroup选项。下面的find命令从文件系统的根目录处查找这样的文件
$ find / -nogroup-print
7、按照更改时间或访问时间等查找文件
如果希望按照更改时间来查找文件,可以使用mtime,atime或ctime选项。如果系统突然没有可用空间了,很有可能某一个文件的长度在此期间增长迅速,这时就可以用mtime选项来查找这样的文件。
用减号-来限定更改时间在距今n日以内的文件,而用加号+来限定更改时间在距今n日以前的文件。
希望在系统根目录下查找更改时间在5日以内的文件,可以用:
$ find / -mtime -5 -print
为了在/var/adm目录下查找更改时间在3日以前的文件,可以用:
$ find /var/adm -mtime +3 -print
8、查找比某个文件新或旧的文件
如果希望查找更改时间比某个文件新但比另一个文件旧的所有文件,可以使用-newer选项。它的一般形式为:
newest_file_name ! oldest_file_name
其中,!是逻辑非符号。
查找更改时间比文件sam新但比文件temp旧的文件:
例:有两个文件
-rw-r--r-- 1 sam adm 0 10月 31 01:07 fiel
-rw-rw-rw- 1 sam adm 34890 10月 31 00:57 httpd1.conf
-rwxrwxr-x 2 sam adm 0 10月 31 01:01 httpd.conf
drw-rw-rw- 2 gem group 4096 10月 26 19:48 sam
-rw-rw-rw- 1 root root 2792 10月 31 20:19 temp
# find -newer httpd1.conf ! -newer temp -ls
1077669 0 -rwxrwxr-x 2 sam adm 0 10月 31 01:01 ./httpd.conf
1077671 4 -rw-rw-rw- 1 root root 2792 10月 31 20:19 ./temp
1077673 0 -rw-r--r-- 1 sam adm 0 10月 31 01:07 ./fiel
查找更改时间在比temp文件新的文件:
$ find . -newer temp -print
9、使用type选项
在/etc目录下查找所有的目录,可以用:
$ find /etc -type d -print
在当前目录下查找除目录以外的所有类型的文件,可以用:
$ find . ! -type d -print
在/etc目录下查找所有的符号链接文件,可以用
$ find /etc -type l -print
10、使用size选项
可以按照文件长度来查找文件,这里所指的文件长度既可以用块(block)来计量,也可以用字节来计量。以字节计量文件长度的表达形式为N c;以块计量文件长度只用数字表示即可。
在按照文件长度查找文件时,一般使用这种以字节表示的文件长度,在查看文件系统的大小,因为这时使用块来计量更容易转换。
在当前目录下查找文件长度大于1 M字节的文件:
$ find . -size +1000000c -print
在/home/apache目录下查找文件长度恰好为100字节的文件:
$ find /home/apache -size 100c -print
在当前目录下查找长度超过10块的文件(一块等于512字节):
$ find . -size +10 -print
11、使用depth选项
在使用find命令时,可能希望先匹配所有的文件,再在子目录中查找。使用depth选项就可以使find命令这样做。这样做的一个原因就是,当在使用find命令向磁带上备份文件系统时,希望首先备份所有的文件,其次再备份子目录中的文件。
在下面的例子中, find命令从文件系统的根目录开始,查找一个名为CON.FILE的文件。
它将首先匹配所有的文件然后再进入子目录中查找。
$ find / -name "CON.FILE" -depth -print
12、使用mount选项
在当前的文件系统中查找文件(不进入其他文件系统),可以使用find命令的mount选项。
从当前目录开始查找位于本文件系统中文件名以XC结尾的文件:
$ find . -name "*.XC" -mount -print
发表于 @ 2007年04月03日 16:04:00|评论(0)|编辑
新一篇: Linux排序命令sort详解 | 旧一篇: Shell中的引号,反引号,双引号,反斜杠
评论:没有评论。
发表评论
* 姓 名:请输入名字
* 主 页:
*
校验码: 检验码无效! 看不清,换一张
请输入评论
当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
Csdn Blog version 3.1a
Copyright © woso
gunzip -c /boot/initrd-2.4.21-37.0.2.ELvmnix.img > /boot/tmp/initrd
mount -o loop -t ext2 /boot/tmp/initrd /boot/tmp/mnt/
命令: gzip
格式: gzip 选项 文件目录列表
功能: 用Lempel-ziv编码压缩文件
选项:
-c 压缩结果写入标准输出,原文件保持不变。缺省时gzip将原文件压缩为.gz文件,并删除原文件。
-v 输出处理信息。
-d 解压缩指定文件。
-t 测试压缩文件的完整性。
解释: 值得一提的是,gzip比compress压缩更加有效。
实例: 目的:压缩/mnt/lgx/a1.doc
命令:#gzip -v /mnt/lgx/a1.doc
结果:产生a1.doc.gz的压缩文件
tar命令:
參數
說明
c, --create
建立新的備份檔
f, --file
指定檔案
r, --append
新增檔案至備份檔結尾
--delete
將 .tar 中的某個檔案刪除
t, --list
列出備份檔內檔案清單
u, --update
僅置換檔案更新部分
v, --verbose
顯示指定執行過程
z, --gzip, --unzip
透過 gzip 處理備份檔
x, --extract
還原備份檔
-C 指定還原路徑
命令名
gzip, gunzip, zcat - 压缩或展开文件
总揽
gzip [ -acdfhlLnNrtvV19 ] [-S 后缀] [ 文件名 ... ]
gunzip [ -acfhlLnNrtvV ] [-S 后缀] [ 文件名 ... ]
zcat [ -fhLV ] [ 文件名 ... ]
描述
Gzip 采用Lempel-Ziv 编码算法(LZ77)压缩给定文件的大小。在可能的情况下, 每个文件被具有扩展名 .gz, 的文件所替换, 同时保留原属主状态,存取和修改时间 (在VMS系统下缺省扩展名为 -gz 在MSDOS、OS/2 FAT, Windows NT FAT 和Atari系统下,缺省扩展名为 z ) 如果未指定文件名,或者指定了一个名为"-"的文件名,则从标准输入读取数据,压缩的结果输出到标准输出。 Gzip 只尝试压缩常规文件,特别地,它将忽略符号连接。
如果压缩后的文件名对于所在的文件系统来说太长,
gzip 会将其截断。 Gzip 只尝试截断文件名中大于3个字符的段(每个段由点分隔)。如果文件名只由较小的段组成,最长的段将被截断。例如,如果文件名的长度限制是14个字符,文件 gzip.msdos.exe 将被压缩为gzi.msd.exe.gz。在没有文件名长度限制的系统中,文件名将不会被截断。
缺省情况下,
gzip 将原始文件名和时间信息保存在压缩后的文件中。当采用 -N 选项解压缩文件时,这些信息将被利用。在经过文件传输后文件名被截断及时间信息未被保留的情况下,这些信息将将用于恢复文件名及时间信息。
用
gzip -d 或者 gunzip 以及 zcat. 可以将压缩后的文件恢复到原始的形式。如果保留在压缩文件中的原始文件名不适合于当前的文件系统,将根据原文件名新建一个合法的文件名。
gunzip
将命令行中以.gz, -gz, .z, -z, _z 或 .Z结尾并具有正确标志头的文件解压缩,并以去掉扩展名的解压缩文件替换原文件。 gunzip 也能识别扩展名为 .tgz 和 .taz 的文件,并将其分别当作 .tar.gz 和 .tar.Z 的缩写。在压缩时,如果采用 .tar 扩展名则需要对文件名进行截断处理时, gzip 将采用 .tgz 作为扩展名。
gunzip
目前能够解压由 gzip, zip, compress, compress -H 以及 pack 产生的文件。对输入格式的检测是自动的。当采用前两种格式时, gunzip 检查一个32位的CRC校验码。对于 pack, gunzip 则检查压缩前的数据长度。标准的 compress 格式的设计无法实现一致性检查。但有时 gunzip 仍然能检测到坏的.Z文件。如果你在解压一个.Z文件时出现错误,不要简单地因为标准的 uncompress 没有报错就认定.Z文件是正确的。这通常意味着标准的 uncompress 没有检查它的输入数据,而盲目地产生了错误的输出。SCO的compress -H格式(lzh压缩方法)不包含CRC校验码,但也允许一些一致性检查。
由
zip 生成的文件, 如果其内容只有一个文件并且是以'deflation'方式压缩的,则可由gzip解压。这一特性只是为了方便将tar.zip 格式的文件转换为tar.gz格式而加入的。要解压含有多个文件的zip文件,请用 unzip.
zcat
的功能与 gunzip -c. 相同。 (在一些系统中, zcat 可能被安装成 gzcat 以保留 compress 与zcat的原有连接。) zcat 将命令行中列出的文件或由标准输入输入的数据解压,解压后的数据写到标准输出。 zcat 解压具有正确标志头的文件,而不管其是否带有 .gz 后缀。
Gzip
采用 zip 和 PKZIP 中所采用的Lempel-Ziv算法。得到的压缩比依赖于输入数据的大小以及公用子串的分布。例如源程序和英文文档能够压缩60-70%。压缩比通常比 LZW( compress 采用的算法)、Huffman编码( pack 所采用的算法)、以及自适应Huffman编码( RI compact ) 等方法要好得多。
即使压缩后的文件略大于原文件,压缩也照样进行。最坏的情况下,多出的数据包括
gzip文件头中的若干个字节,加上每块32K的5个字节,或者,对于大文件来说0.015% 的放大率。注意实际占用的硬盘块数目几乎从不增加。 gzip 在压缩和解压缩时保留原文件的属主和时间信息。
选项
-a --ascii
Ascii文本模式:按本地习惯转换行结束符。该选项仅在一些非Unix 系统上有效。对于MSDOS,在压缩时CR LF(译注:即回车和换行符)被转换为LF,在解压时LF被转换为CR LF。
-c --stdout --to-stdout
将结果写到标准输出;原文件保持不变。如果有多个输入文件,输出将由一系列独立的压缩文件组成。如果想得到较好的压缩率,在压缩前应将多个文件连在一起。
-d --decompress --uncompress
解压缩。
-f --force
强制压缩和解压缩,即使指定文件具有多重连接,或相应文件已经存在,或压缩数据来自或写往一个终端。如果输入数据是 gzip 无法识别的格式,同时在命令行中也给出了--stdout选项,gzip将把输入数据拷贝至标准输出而不做任何改动,就象cat所做的一样。如果未给出 -f 选项,并且未在后台运行, gzip 会提示用户以确认是否覆盖一个已存在的文件。
-h --help
显示帮助信息然后退出。
-l --list
列出每个压缩文件的如下项目:
compressed size: 压缩文件的长度
uncompressed size: 压缩前文件的长度
ratio: 压缩率(如果未知则为0.0%)
uncompressed_name: 压缩前的文件名
对于非gzip格式的文件,压缩前文件长度显示为-1,例如由compress压缩的.Z文件。可用下列命令得到这种文件压缩前的长度:
zcat file.Z | wc -c
如果同时指定了--verbose选项,下列项目也被列出:
method: 压缩方式
crc: 未压缩数据的32位CRC校验码
date & time: 压缩前文件的时间信息
目前支持的压缩方式有deflate、compress、lzh(SCO下的compress -H)以及pack等方式。对于非gzip格式的文件,crc校验码显示为ffffffff。
若指定了--name选项,如果有的话,压缩前文件名,日期以及时间是保存在压缩文件中的内容。
若指定了--verbose选项,还将列出所有文件的长度总和,除非某些文件的长度未知。若指定--quiet选项,将不显示标题和合计两行内容。
-L --license
显示 gzip 的许可证信息然后退出。
-n --no-name
在压缩时,缺省不保留原始文件名和时间信息。(如果必须对文件名作截断处理,则原始文件名总是被保存。) 在解压缩时,即使有也不恢复原始文件名(仅将压缩文件名中的 gzip 后缀去掉)和时间信息(拷贝压缩文件中相应信息)。该选项是压缩时的缺省选项。
-N --name
在压缩时总是保存原始文件名和时间信息;该选项为缺省选项。在解压缩时,如果存在原始文件名和时间信息则恢复之。该选项可用于对文件名长度有限制的系统,以及经过文件传输后丢失时间信息的情况。
-q --quiet
压制所有警告信息。
-r --recursive
递归地访问目录结构。如果命令行中有目录名, gzip 将进入目录并压缩所有找到的文件(如果执行的命令是 gunzip 则对其解压缩)。
-S .suf --suffix .suf
采用.suf后缀取代.gz后缀。可以指定任何后缀,但应避免使用除了.z和.gz以外的其它后缀,以免文件传输到其它系统时发生混淆。一个空后缀将迫使gunzip 解压缩所有文件而不管它具有什么样的后缀,例如:
gunzip -S "" * (在MSDOS下用*.*替换*)
以前版本的gzip采用.z后缀。为了避免与 pack(1). 冲突,后来作了改动。
-t --test
测试。检查压缩文件的完整性。
-v --verbose
详尽模式。显示每个压缩或解压缩文件的名字和压缩率。
-V --version
版本。显示版本号和编译选项后退出。 Version. Display the version number and compilation options then quit.
-# --fast --best
用指定的数字 # 调整压缩速度,其中 -1 及 --fast 对应最快压缩方式(压缩率较低), -9 及 --best 对应最慢压缩方式(压缩率最佳)。缺省的压缩级别为
- (也就是说,以速度为代价偏向于高压缩率)。
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/79570/showart_1200647.html |
|