IT猫扑网:您身边最放心的安全下载站! 最新更新| 软件分类| 专题汇总| 手机版

您当前所在位置:IT猫扑网 > 操作系统 > LINUX > Linux使用find和xargs

Linux使用find和xargs

时间:2015-06-28 00:00 来源:IT猫扑网|http://www.itmop.com/ 作者:网管联盟 我要评论(0)

  有时可能需要在系统中查找具有某一特征的文件 (例如文件权限、文件属主、文件长度、文件类型等等)。这样做可能有很多原因。可能出于安全性的考虑,或是一般性的系统管理任务,或许只是为了找出一个不知保存在什么地方的文件。 find是一个非常有效的工具,它可以遍历当前目录甚至于整个文件系统来查找某些文件或目录。

  在此介绍以下内容:

  ? find命令选项。

  ? 使用find命令不同选项的例子。

  ? 配合find使用xargs命令的例子。

  由于find具有如此强大的功能,所以它的选项也很多,其中大部分选项都值得我们花时间来了解一下。即使系统中含有网络文件系统 (NFS ),find命令在该文件系统中同样有效,只要你具有相应的权限。

  在运行一个非常消耗资源的find命令时,很多人都倾向于把它放在后台执行,因为遍历一个大的文件系统可能会花费很长的时间(这里是指30G字节以上的文件系统)。

  find命令的一般形式为:

  find pathname -options [-print -exec -ok]

  让我们来看看该命令的参数:

  pathname   find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。

  -print   find命令将匹配的文件输出到标准输出。

  -exec   find命令对匹配的文件执行该参数所给出的 shell命令。相应命令的形式为 'command' {} ;,注意{ }和;之间的空格。

  -ok   和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的 shell命令,

  在执行每一个命令之前,都会给出提示,让用户来确定是否执行。

  1   find命令选项

  find命令有很多选项或表达式,每一个选项前面跟随一个横杠 -。让我们先来看一下该命令的主要选项,然后再给出一些例子。

  -name   按照文件名查找文件。

  -perm   按照文件权限来查找文件。

  -prune   使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用了 -depth

  选项,那么-prune选项将被find命令忽略。

  -user   按照文件属主来查找文件。

  -group   按照文件所属的组来查找文件。

  -mtime -n +n   按照文件的更改时间来查找文件,- n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前。find命令还有-atime和-ctime选项,但它们都和-mtime选项相似,所以我们在这里只介绍-mtime选项。

  -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命令,将这些文件备份到磁带设备中。

  1.1   使用name选项

  文件名选项是find命令最常用的选项,要么单独使用该选项,要么和其他选项一起使用。

  可以使用某种文件名模式来匹配文件,记住要用引号将文件名模式引起来。

  不管当前路径是什么,如果想要在自己的根目录$HOME中查找文件名符合*.txt的文件,

  使用~作为'pathname参数,波浪号~代表了你的$HOME目录。

  $ find ~ -name &*.txt& -print

  想要在当前目录及子目录中查找所有的'*.txt’文件,可以用:

  $ find . -name &*.txt& -print

  想要的当前目录及子目录中查找文件名以一个大写字母开头的文件,可以用:

  $ find . -name &[A-Z]*& -print

  想要在/ e t c目录中查找文件名以host开头的文件,可以用:

  $ find /etc -name &host*& -print

  想要查找$HOME目录中的文件,可以用:

  $ find ~ -name &*& -print  或find . -print

  要想让系统高负荷运行,就从根目录开始查找所有的文件。如果希望在系统管理员那里保留一个好印象的话,最好在这么做之前考虑清楚!

  $ find / -name &*& -print

  如果想在当前目录查找文件名以两个小写字母开头,跟着是两个数字,最后是 * . t x t的文件,下面的命令就能够返回名为ax37.txt的文件:

  $ find . -name &[a-z][a-z][0--9][0--9].txt& -print

  1.2   使用perm选项

  如果希望按照文件权限模式来查找文件的话,可以采用 - p e r m选项。你可能需要找到所有用户都具有执行权限的文件,或是希望查看某个用户目录下的文件权限类型。在使用这一选项的时候,最好使用八进制的权限表示法。

  为了在当前目录下查找文件权限位为 7 5 5的文件,即文件属主可以读、写、执行,其他用户可以读、执行的文件,可以用:

  $ find . -perm 755 -print

  如果希望在当前目录下查找所有用户都可读、写、执行的文件(要小心这种情况) ,我们可以使用find命令的- p e r m选项。在八进制数字前面要加一个横杠 -。在下面的命令中- p e r m代表按照文件权限查找,而‘0 0 7’和你在c h m o d命令的绝对模式中所采用的表示法完全相同。

  $ find . -perm 007 -print

  1.3   忽略某个目录

  如果在查找文件时希望忽略某个目录,因为你知道那个目录中没有你所要查找的文件,那么可以使用-prune选项来指出需要忽略的目录。在使用 -prune选项时要当心,因为如果你同时使用了-depth选项,那么-prune选项就会被find命令忽略。

  如果希望在/apps目录下查找文件,但不希望在/apps/bin目录下查找,可以用:

  $ find /apps -name &/apps/bin& -prune -o -print

  1.4   使用user和nouser选项

  如果希望按照文件属主查找文件,可以给出相应的用户名。例如,在$HOME目录中查找文件属主为d a v e的文件,可以用:

  $ find ~ -user dave -print

  在/etc目录下查找文件属主为uucp的文件:

  $ find /etc -user uucp -print

  为了查找属主帐户已经被删除的文件,可以使用 -nouser选项。这样就能够找到那些属主在/etc/passwd文件中没有有效帐户的文件。在使用 -nouser选项时,不必给出用户名;find命令能够为你完成相应的工作。例如,希望在/home目录下查找所有的这类文件,可以用:

  $ find /home -nouser -print

  1.5   使用group和nogroup选项

  就像user和nouser选项一样,针对文件所属于的用户组, find命令也具有同样的选项,为了在/apps目录下查找属于accts用户组的文件,可以用:

  $ find /apps -group accts -print

  要查找没有有效所属用户组的所有文件,可以使用 nogroup选项。下面的find命令从文件系统的根目录处查找这样的文件

  $ fine/-nogroup-print

  按照更改时间查找文件

  如果希望按照更改时间来查找文件,可以使用mtime选项。如果系统突然没有可用空间了,

  很有可能某一个文件的长度在此期间增长迅速,这时就可以用mtime选项来查找这样的文件。

  用减号-来限定更改时间在距今 n日以内的文件,而用加号 +来限定更改时间在距今n日以前的

  文件。

  希望在系统根目录下查找更改时间在5日以内的文件,可以用:

  $ find / -mtime -5 -print

  为了在/ v a r / a d m目录下查找更改时间在3日以前的文件,可以用:

  $ find /var/adm -mtime +3 -print

  用以下命令查找创建时间30天以前的文件,并删除:

  find . -mtime +30 -exec rm -f {} ;

  2. 使用xargs

  在使用find命令的-exec选项处理匹配到的文件时,find命令将所有匹配到的文件一起传递给exec执行。不幸的是,有些系统对能够传递给 exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误。错误信息通常是&参数列太长&或&参数列溢出& 。这就是xargs命令的用处所在,特别是与 find命令一起使用。find命令把匹配到的文件传递给 xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像 -exec选项那样。这样它可以先处理

  最先获取的一部分文件,然后是下一批,并如此继续下去。在有些系统中,使用 -exec选项会为处理每一个匹配到的文件而发

关键词标签:Linux

相关阅读 安装红帽子RedHat Linux9.0操作系统教程 Tomcat9.0如何安装_Tomcat9.0环境变量配置方法 多种操作系统NTP客户端配置 Linux操作系统修改IP Linux实现SCSI硬盘热插拔及在线识别 Linux下用CDMA modem拨号上网

文章评论
发表评论

热门文章 安装红帽子RedHat Linux9.0操作系统教程 安装红帽子RedHat Linux9.0操作系统教程 Linux服务器:设计高性能网站架构-LLMP Linux服务器:设计高性能网站架构-LLMP 使用Clonezilla迁移到虚拟Linux环境 使用Clonezilla迁移到虚拟Linux环境 Linux上的MRTG流量监控中心 Linux上的MRTG流量监控中心 Linux 双网卡绑定一个IP原理及实现 Linux 双网卡绑定一个IP原理及实现 linux和windows等系统远程控制ubuntu桌面 linux和windows等系统远程控制ubuntu桌面

相关下载

人气排行 Linux下获取CPUID、硬盘序列号与MAC地址 dmidecode命令查看内存型号 linux tc实现ip流量限制 安装红帽子RedHat Linux9.0操作系统教程 linux下解压rar文件 lcx.exe、nc.exe、sc.exe入侵中的使用方法 Ubuntu linux 关机、重启、注销 命令 查看linux服务器硬盘IO读写负载 linux命令行浏览器的使用方法 Linux NFS服务固定端口及防火墙配置 U盘安装Ubuntu 10.04 Linux清除用户登录记录和命令历史方法