关闭

关闭

关闭

封号提示

内容

首页 Aix系统find,xargs详述.doc

Aix系统find,xargs详述.doc

Aix系统find,xargs详述.doc

上传者: lane.hu09 2012-07-17 评分 0 0 0 0 0 0 暂无简介 简介 举报

简介:本文档为《Aix系统find,xargs详述doc》,可适用于IT/计算机领域,主题内容包含注意mv本身需要个操作数此命令只写第个操作数在{}后!!!finddblogNODEtypefctimeexecmv{}bkLinux文件查找命令f符等。

注意mv本身需要个操作数此命令只写第个操作数在{}后!!!finddblogNODEtypefctimeexecmv{}bkLinux文件查找命令find,xargs详述目录版权声明前言:关于find命令一、find命令格式、find命令的一般形式为、find命令的参数、find命令选项、使用exec或ok来执行shell命令二、find命令的例子、查找当前用户主目录下的所有文件、为了在当前目录中文件属主具有读、写权限并且文件所属组的用户和其他用户具有读权限的文件、为了查找系统中所有文件长度为的普通文件并列出它们的完整路径、查找varlogs目录中更改时间在日以前的普通文件并在删除之前询问它们、为了查找系统中所有属于root组的文件、find命令将删除当目录中访问时间在日以来、含有数字后缀的adminlog文件、为了查找当前文件系统中的所有目录并排序、为了查找系统中所有的rmt磁带设备三、xargs四、find命令的参数、使用name选项、用perm选项、忽略某个目录、使用find查找文件的时候怎么避开某个文件目录、使用user和nouser选项、使用group和nogroup选项、按照更改时间或访问时间等查找文件、查找比某个文件新或旧的文件、使用type选项、使用size选项、使用depth选项、使用mount选项五、关于本文六、相关文档正文版权声明本文是zhyfly兄贴在LinuxSirOrg的一个帖子而整理出来的如果您对版权有疑问请在本帖后面跟帖。谢谢本文的HTML版本由北南南北整理修改了整篇文档的全角及说明文字中的单词中每个字母空格的问题为标题加了编号方便大家阅读前言:关于find命令由于find具有强大的功能所以它的选项也很多其中大部分选项都值得我们花时间来了解一下。即使系统中含有网络文件系统(NFS)find命令在该文件系统中同样有效只你具有相应的权限。在运行一个非常消耗资源的find命令时很多人都倾向于把它放在后台执行因为遍历一个大的文件系统可能会花费很长的时间(这里是指G字节以上的文件系统)。一、find命令格式、find命令的一般形式为findpathnameoptionsprintexecok、find命令的参数pathname:find命令所查找的目录路径。例如用来表示当前目录用来表示系统根目录。print:find命令将匹配的文件输出到标准输出。exec:find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command'{}注意{}和之间的空格。ok:和exec的作用相同只不过以一种更为安全的模式来执行该参数所给出的shell命令在执行每一个命令之前都会给出提示让用户来确定是否执行。、find命令选项name按照文件名查找文件。perm按照文件权限来查找文件。prune使用这一选项可以使find命令不在当前指定的目录中查找如果同时使用depth选项那么prune将被find命令忽略。user按照文件属主来查找文件。group按照文件所属的组来查找文件。mtimenn按照文件的更改时间来查找文件n表示文件更改时间距现在n天以内n表示文件更改时间距现在n天以前。find命令还有atime和ctime选项但它们都和mtime选项。nogroup查找无有效所属组的文件即该文件所属的组在etcgroups中不存在。nouser查找无有效属主的文件即该文件的属主在etcpasswd中不存在。newerfile!file查找更改时间比文件file新但比文件file旧的文件。type查找某一类型的文件诸如:b块设备文件。d目录。c字符设备文件。p管道文件。l符号链接文件。f普通文件。sizen:c查找文件长度为n块的文件带有c时表示文件长度以字节计。depth:在查找文件时首先查找当前目录中的文件然后再在其子目录中查找。fstype:查找位于某一类型文件系统中的文件这些文件系统类型通常可以在配置文件etcfstab中找到该配置文件中包含了本系统中有关文件系统的信息。mount:在查找文件时不跨越文件系统mount点。follow:如果find命令遇到符号链接文件就跟踪至链接所指向的文件。cpio:对匹配的文件使用cpio命令将这些文件备份到磁带设备中。另外,下面三个的区别:aminn查找系统中最后N分钟访问的文件atimen查找系统中最后n*小时访问的文件cminn查找系统中最后N分钟被改变文件状态的文件ctimen查找系统中最后n*小时被改变文件状态的文件mminn查找系统中最后N分钟被改变文件数据的文件mtimen查找系统中最后n*小时被改变文件数据的文件、使用exec或ok来执行shell命令使用find时只要把想要的操作写在一个文件里就可以用exec来配合find查找很方便的在有些操作系统中只允许exec选项执行诸如ls或lsl这样的命令。大多数用户使用这一选项是为了查找旧文件并删除它们。建议在真正执行rm命令删除文件之前最好先用ls命令看一下确认它们是所要删除的文件。exec选项后面跟随着所要执行的命令或脚本然后是一对儿{}一个空格和一个最后是一个分号。为了使用exec选项必须要同时使用print选项。如果验证一下find命令会发现该命令只输出从当前路径起的相对路径及文件名。例如:为了用lsl命令列出所匹配到的文件可以把lsl命令放在find命令的exec选项中#findtypefexeclsl{}rwrrrootrootconfhttpdconfrwrrrootrootconfmagicrwrrrootrootconfdREADME上面的例子中find命令匹配到了当前目录下的所有普通文件并在exec选项中使用lsl命令将它们列出。在logs目录中查找更改时间在日以前的文件并删除它们:$findlogstypefmtimeexecrm{}记住:在shell中用任何方式删除文件之前应当先查看相应的文件一定要小心!当使用诸如mv或rm命令时可以使用exec选项的安全模式。它将在对每个匹配到的文件进行操作之前提示你。在下面的例子中find命令在当前目录中查找所有文件名以LOG结尾、更改时间在日以上的文件并删除它们只不过在删除之前先给出提示。$findname"*conf"mtimeokrm{}<rmconfhttpdconf>n按y键删除文件按n键不删除。任何形式的命令都可以在exec选项中使用。在下面的例子中我们使用grep命令。find命令首先匹配所有文件名为“passwd*”的文件例如passwd、passwdold、passwdbak然后执行grep命令看看在这些文件中是否存在一个sam用户。#findetcname"passwd*"execgrep"sam"{}sam:x::::usrsam:binbash二、find命令的例子、查找当前用户主目录下的所有文件:下面两种方法都可以使用$find$HOMEprint$find~print、让当前目录中文件属主具有读、写权限并且文件所属组的用户和其他用户具有读权限的文件$findtypefpermexeclsl{}、为了查找系统中所有文件长度为的普通文件并列出它们的完整路径$findtypefsizeexeclsl{}、查找varlogs目录中更改时间在日以前的普通文件并在删除之前询问它们$findvarlogstypefmtimeokrm{}、为了查找系统中所有属于root组的文件$findgrouprootexeclsl{}rwrrrootroot月:fie、find命令将删除当目录中访问时间在日以来、含有数字后缀的adminlog文件。该命令只检查三位数字所以相应文件的后缀不要超过。先建几个adminlog*的文件才能使用下面这个命令$findname"adminlog"atimeokrm{}<rmadminlog>n<rmadminlog>n<rmadminlog>n<rmadminlog>n、为了查找当前文件系统中的所有目录并排序$findtyped|sort、为了查找系统中所有的rmt磁带设备$finddevrmtprint三、xargsxargsbuildandexecutecommandlinesfromstandardinput在使用find命令的exec选项处理匹配到的文件时find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制这样在find命令运行几分钟之后就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在特别是与find命令一起使用。find命令把匹配到的文件传递给xargs命令而xargs命令每次只获取一部分文件而不是全部不像exec选项那样。这样它可以先处理最先获取的一部分文件然后是下一批并如此继续下去。在有些系统中使用exec选项会为处理每一个匹配到的文件而发起一个相应的进程并非将匹配到的文件全部作为参数一次执行这样在有些情况下就会出现进程过多系统性能下降的问题因而效率不高而使用xargs命令则只有一个进程。另外在使用xargs命令时究竟是一次获取所有的参数还是分批取得参数以及每一次获取参数的数目都会根据该命令的选项及系统内核中相应的可调参数来确定。来看看xargs命令是如何同find命令一起使用的并给出一些例子。下面的例子查找系统中的每一个普通文件然后使用xargs命令来测试它们分别属于哪类文件#findtypefprint|xargsfilekdeAutostartAutorundesktop:UnicodeEnglishtextkdeAutostartdirectory:ISOtext在整个系统中查找内存信息转储文件(coredump)然后把结果保存到tmpcorelog文件中:$findname"core"print|xargsecho"">tmpcorelog上面这个执行太慢我改成在当前目录下查找#findname"file*"print|xargsecho"">tempcorelog#cattempcorelogfile在当前目录下查找所有用户具有读、写和执行权限的文件并收回相应的写权限:#lsldrwxrwxrwxsamadm月:filerwxrwxrwxsamadm月:httpconfrwxrwxrwxsamadm月:httpdconf#findpermprint|xargschmodow#lsldrwxrwxrxsamadm月:filerwxrwxrxsamadm月:httpconfrwxrwxrxsamadm月:httpdconf用grep命令在所有的普通文件中搜索hostname这个词:#findtypefprint|xargsgrep"hostname"httpdconf:#differentIPaddressesorhostnamesandhavethemhandledbythehttpdconf:#VirtualHost:Ifyouwanttomaintainmultipledomainshostnamesonyour用grep命令在当前目录下的所有普通文件中搜索hostnames这个词:#findname*typefprint|xargsgrep"hostnames"httpdconf:#differentIPaddressesorhostnamesandhavethemhandledbythehttpdconf:#VirtualHost:Ifyouwanttomaintainmultipledomainshostnamesonyour注意在上面的例子中用来取消find命令中的*在shell中的特殊含义。find命令配合使用exec和xargs可以使用户对所匹配到的文件执行几乎所有的命令。四、find命令的参数下面是find一些常用参数的例子有用到的时候查查就行了像上面前几个贴子都用到了其中的的一些参数也可以用man或查看论坛里其它贴子有find的命令手册、使用name选项文件名选项是find命令最常用的选项要么单独使用该选项要么和其他选项一起使用。可以使用某种文件名模式来匹配文件记住要用引号将文件名模式引起来。不管当前路径是什么如果想要在自己的根目录$HOME中查找文件名符合*txt的文件使用~作为'pathname'参数波浪号~代表了你的$HOME目录。$find~name"*txt"print想要在当前目录及子目录中查找所有的‘*txt’文件可以用:$findname"*txt"print想要的当前目录及子目录中查找文件名以一个大写字母开头的文件可以用:$findname"AZ*"print想要在etc目录中查找文件名以host开头的文件可以用:$findetcname"host*"print想要查找$HOME目录中的文件可以用:$find~name"*"print或findprint要想让系统高负荷运行就从根目录开始查找所有的文件。$findname"*"print如果想在当前目录查找文件名以两个小写字母开头跟着是两个数字最后是txt的文件下面的命令就能够返回名为axtxt的文件:$findname"azaztxt"print、用perm选项按照文件权限模式用perm选项,按文件权限模式来查找文件的话。最好使用八进制的权限表示法。如在当前目录下查找文件权限位为的文件即文件属主可以读、写、执行其他用户可以读、执行的文件可以用:$findpermprint还有一种表达方法:在八进制数字前面要加一个横杠表示都匹配如就相当于相当于#lslrwxrwxrxsamadm月:httpconfrwrwrwsamadm月:httpdconfrwxrwxrxsamadm月:httpdconfdrwrwrwgemgroup月:samrwrwrwrootroot月:temp#findperm#findpermsamhttpdconftemppermmode:文件许可正好符合modepermmode:文件许可部分符合modepermmode:文件许可完全符合mode、忽略某个目录如果在查找文件时希望忽略某个目录因为你知道那个目录中没有你所要查找的文件那么可以使用prune选项来指出需要忽略的目录。在使用prune选项时要当心因为如果你同时使用了depth选项那么prune选项就会被find命令忽略。如果希望在apps目录下查找文件但不希望在appsbin目录下查找可以用:$findappspath"appsbin"pruneoprint、使用find查找文件的时候怎么避开某个文件目录比如要在usrsam目录下查找不在dir子目录之内的所有文件findusrsampath"usrsamdir"pruneoprintfindpathexpression在路径列表的后面的是表达式path"usrsam"pruneoprint是path"usrsam"apruneoprint的简写表达式按顺序求值,a和o都是短路求值与shell的和||类似如果path"usrsam"为真则求值prune,prune返回真与逻辑表达式为真否则不求值prune与逻辑表达式为假。如果path"usrsam"aprune为假则求值printprint返回真或逻辑表达式为真否则不求值print或逻辑表达式为真。这个表达式组合特例可以用伪码写为ifpath"usrsam"thenpruneelseprint避开多个文件夹findusrsam(pathusrsamdiropathusrsamfile)pruneoprint圆括号表示表达式的结合。表示引用即指示shell不对后面的字符作特殊解释而留给find命令去解释其意义。查找某一确定文件name等选项加在o之后#findusrsam(pathusrsamdiropathusrsamfile)pruneoname"temp"print、使用user和nouser选项按文件属主查找文件如在$HOME目录中查找文件属主为sam的文件可以用:$find~usersamprint在etc目录下查找文件属主为uucp的文件:$findetcuseruucpprint为了查找属主帐户已经被删除的文件可以使用nouser选项。这样就能够找到那些属主在etcpasswd文件中没有有效帐户的文件。在使用nouser选项时不必给出用户名find命令能够为你完成相应的工作。例如希望在home目录下查找所有的这类文件可以用:$findhomenouserprint、使用group和nogroup选项就像user和nouser选项一样针对文件所属于的用户组find命令也具有同样的选项为了在apps目录下查找属于gem用户组的文件可以用:$findappsgroupgemprint要查找没有有效所属用户组的所有文件可以使用nogroup选项。下面的find命令从文件系统的根目录处查找这样的文件$findnogroupprint、按照更改时间或访问时间等查找文件如果希望按照更改时间来查找文件可以使用mtime,atime或ctime选项。如果系统突然没有可用空间了很有可能某一个文件的长度在此期间增长迅速这时就可以用mtime选项来查找这样的文件。用减号来限定更改时间在距今n日以内的文件而用加号来限定更改时间在距今n日以前的文件。希望在系统根目录下查找更改时间在日以内的文件可以用:$findmtimeprint为了在varadm目录下查找更改时间在日以前的文件可以用:$findvaradmmtimeprint、查找比某个文件新或旧的文件如果希望查找更改时间比某个文件新但比另一个文件旧的所有文件可以使用newer选项。它的一般形式为:newestfilename!oldestfilename其中!是逻辑非符号。查找更改时间比文件sam新但比文件temp旧的文件:例:有两个文件rwrrsamadm月:fielrwrwrwsamadm月:httpdconfrwxrwxrxsamadm月:httpdconfdrwrwrwgemgroup月:samrwrwrwrootroot月:temp#findnewerhttpdconf!newertemplsrwxrwxrxsamadm月:httpdconfrwrwrwrootroot月:temprwrrsamadm月:fiel查找更改时间在比temp文件新的文件:$findnewertempprint、使用type选项在etc目录下查找所有的目录可以用:$findetctypedprint在当前目录下查找除目录以外的所有类型的文件可以用:$find!typedprint在etc目录下查找所有的符号链接文件可以用$findetctypelprint、使用size选项可以按照文件长度来查找文件这里所指的文件长度既可以用块(block)来计量也可以用字节来计量。以字节计量文件长度的表达形式为Nc以块计量文件长度只用数字表示即可。在按照文件长度查找文件时一般使用这种以字节表示的文件长度在查看文件系统的大小因为这时使用块来计量更容易转换。在当前目录下查找文件长度大于M字节的文件:$findsizecprint在homeapache目录下查找文件长度恰好为字节的文件:$findhomeapachesizecprint在当前目录下查找长度超过块的文件(一块等于字节):$findsizeprint、使用depth选项在使用find命令时可能希望先匹配所有的文件再在子目录中查找。使用depth选项就可以使find命令这样做。这样做的一个原因就是当在使用find命令向磁带上备份文件系统时希望首先备份所有的文件其次再备份子目录中的文件。在下面的例子中find命令从文件系统的根目录开始查找一个名为CONFILE的文件。它将首先匹配所有的文件然后再进入子目录中查找。$findname"CONFILE"depthprint、使用mount选项在当前的文件系统中查找文件(不进入其他文件系统)可以使用find命令的mount选项。从当前目录开始查找位于本文件系统中文件名以XC结尾的文件:$findname"*XC"mountprintPAGE

用户评论(0)

0/200

精彩专题

上传我的资料

每篇奖励 +2积分

资料评价:

/14
1下载券 下载 加入VIP, 送下载券

意见
反馈

立即扫码关注

爱问共享资料微信公众号

返回
顶部