FIND命令大全

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Linux Find命令精通指南

作者:Sheryl Calish

简单介绍这一无处不在的命令的强大的方面以及混乱的方面。

2008年7月发布

Linux find命令是所有Linux命令中最有用的一个,同时也是最混乱的一个。它很难,因为它的语法与其他Linux命令的标准语法不同。但是,它很强大,因为它允许您按文件名、文件类型、用户甚至是时间戳查找文件。使用find命令,您不但可以找到具这些属性任意组合的文件,还可以对它找到的文件执行操作。

本文的目的是,通过概述find命令的用途和潜能,简化该命令的学习和使用。同时,它将针对find命令的某些最强大但最混乱的方面提供一个基本的指南和参考。

[注意:本文使用的find版本是GNU版本,因此,某些细节可能与其他版本的find有所不同。]

基本格式

开始之前,我们先来看一下find命令的基本结构:

find start_directory test options criteria_to_match

action_to_perform_on_results

在以下命令中,find将开始在当前目录(用“.”表示)中查找任何扩展名为“java”的文件:find.-name"*.java"

下面是该命令所找到的命令的缩略清单:

find.-name"*.java"

./REGEXPvalidate/src/oracle/otnsamples/plsql/ConnectionManager.java

./REGEXPvalidate/src/oracle/otnsamples/plsql/DBManager.java

..

[注意:如果您从本文剪切并粘贴来运行该find命令,您可能需要使用自己的键盘替换双引号(“”)才能得出正确的结果。]

以下命令将执行相同的操作。在这两种情况下,您都需要对通配符进行转义以确保它传递到find命令并且不由shell解释。因此,请将您的搜索字符串放到引号里,或者在它前面加上反斜线:

find.-name\*.java

尽管find的所有参数均为可选,但是如果您未指定从哪里开始搜索,搜索默认将在当前目录中开始。如果您不指定要匹配的测试连接、选项或值,您的结果将不完整或者无区别。

运行以下三个find命令将得出同样的结果—当前目录和所有子目录中的所有文件(包括隐藏文件)的完整清单:

find

find.

find.-print

这类似于运行一个带-la选项的ls命令。如果您希望上述命令的输出包含完整的路径名(或许是为了备份),您将需要指定起始目录的完整路径:

find/home/bluher-name\*.java

/home/bluher/plsql/REGEXPvalidate/src/oracle/otnsamples/plsql/Connect ionManager.java

/home/bluher/plsql/REGEXPvalidate/src/oracle/otnsamples/plsql/DBManag er.java/

...

您还可以在搜索字符串中指定多个起始目录。如果以具有相应权限的用户身份运行,以下命令将下到/usr、/home/tmp目录查找所有jar文件:

find/usr/home/tmp-name"*.jar"

但是,如果您没有相应的权限,您在开始浏览许多系统目录时将生成错误消息。以下是一个示例:

find:/tmp/orbit-root:Permission denied

您可以通过附加您的搜索字符串来避免混乱的输出,如下所示:

find/usr/home/tmp-name"*.jar"2>/dev/null

这会将所有错误消息发送到空文件,因此提供清理器输出。

默认情况下,find是区分大小写的。对于不区分大小写的find,将-iname测试替换为-name测试。

find downloads-iname"*.gif"

downloads/.xvpics/Calendar05_enlarged.gif

downloads/lcmgcfexsmall.GIF

除文件名外,您还可以按类型搜索文件。例如,您可以使用以下命令查找一个目录中的所有

子目录:

find.-type d

您可以使用以下命令查找您的/usr目录中的所有符号链接:

find/usr-type l

这可能会列出3,000多个链接。以下的任何一个命令使用根权限运行都将列出/usr目录中的链接以及它所指向的文件:

#find/usr/bin-type l-name"z*"-exec ls-l{}\;

lrwxrwxrwx1root root8Dec1223:17/usr/bin/zsh->/bin/zsh lrwxrwxrwx1root root5Dec1223:17/usr/bin/zless->zmore lrwxrwxrwx1root root9Dec1223:17/usr/bin/zcat->/bin/zcat

find/usr/bin-type l-name"z*"-ls

但是,第二个更短的命令将列出更多的文件,以及目录和inode信息:在本文后面的部分中,我们将讨论-exec和-ls操作的用法。

其他find可以找到的文件类型包括:

•b—块(缓存)特殊

•c—字符(未缓存)特殊

•p—命名管道(FIFO)

•s—套接字

使用根作为find命令的起点会极大地降低系统的速度。如果您必须运行这样一个命令,您可以在非高峰时段或晚上运行它。您可以使用以下语法将输出重定向到一个文件:

find/-print>masterfilelist.out

如果您错误地输入一个find命令,生成大量不必要的输出,只需按CTRL-C中断该命令,这将停止最近执行的命令。

在具多个文件系统的企业网络上,限制find查找的文件也是一个特别好用的方法。尽可能多地使用选项和测试以减少系统上的负载。用于此目的的两个最有用的选项是-xdev和-mount。它们通过阻止find下到其他文件系统(如

MS-DOS、CD-ROM或AFS)上的目录中缩短了搜索范围。这将搜索限制为同一类型的文件系统作为起始目录。

如果运行mount命令,双引导系统上的用户可以使用这些选项。假设涉及Windows分区,您可以使用类似以下的命令安装它:

mount-t vfat/dev/sda1/mnt/msdos

相关文档
最新文档