使用UNIXfind命令的高级技术

发布 2021-04-21 23:48:28 阅读 1377

本文介绍如何使用 find 命令浏览 unix 文件系统中丰富的内容。find 命令是 unix 程序员的技能中功能最强大和最有用的命令之一。各种版本的 unix 都具有可以包含数以千计的不同类型文件的文件系统。

有了如此之多的选择,要定位一个特定文件或文件集,将变得非常困难。而 find 命令能通过许多方式,让这项任务变得更加轻松。

没有什么能比得上探索和发现新的人、地方、事物所带来的刺激。领域可能有所不同,但有些原则却是一样的。在这些原则中,有一条是记录下您的旅程,另一条则是了解和使用工具。

unix 操作系统很像一片广阔的、未经标识的荒野。当您在这样的领域中旅行时,可以选择一些日后能够给您带来帮助的工具。find 命令便是这样一种工具。

find 命令不仅能够简单地用来定位文件,正如本文将介绍的那样,它还可以自动地执行其他 unix 命令的序列,其中使用所查找到的文件名作为输入。

所有称职的操作系统都具有协助您查找相关内容的工具。与大多数工具不同的是,unix 中的 find 命令可以自动地对其查找到的文件执行许多操作。

图形用户界面 (gui) 中的标准 find 工具允许您对所查找到的文件进行一些常规操作任务:您可以将它们标记为剪切、复制和粘贴,您可以将它们移动到一个新的位置,并且可以使用创建它们的应用程序来打开它们。这些操作涉及到两个或更多的步骤,并且不是自动完成的,即首先查找到文件,然后使用 gui 为下一步的操作对它们进行标记。

这种方法对许多用户来说没有问题,但是 explorer 需要的不仅是这些。

unix 的 find 命令可以删除、复制、移动和执行其查找到的文件。另外,使用 -exec 参数可以根据您所需要的 unix 命令的序列来自动地运行这些文件。它甚至可以在对任何文件执行这些操作前,进一步让您进行确认。

与大多数 unix 命令一样,unix find 命令具有一长串令人生畏的选项和开关,它们会阻碍人们深入地学习该命令,但正是因为其范围广阔,真正的 explorer 并不会被它们吓倒。一条好的通用原则在简化一个复杂问题时都会经过漫长的过程。启动一个 xterm,并尝试执行下面的命令:

exec 参数中包含了真正有价值的操作。当查找到匹配搜索条件的文件时,-exec 参数定义了将对这些文件进行什么操作。该示例告诉计算机进行如下操作:

1 从当前文件夹开始往下搜索,紧跟在 find 之后,使用点号 (.

2 定位所有名称以 .gif 结尾的文件(图形文件)。

3 列出所有查找到的文件,使用 ls 命令。

需要对 -exec 参数进行更深入地研究。当查找到匹配搜索条件的文件名时,find 命令执行 ls {}字符串,用文件名和路径代替文本 {}假设在搜索中查找到 文件,find 将执行如下所示的命令:

本文余下的内容建立在这条一般原则之上:仔细地使用 find 命令可以让 unix 文件系统的管理工作变得更加容易。例如,如果您使用了 -fstype 参数,find 命令可以根据查找到的文件所处的文件系统的类型来对命令进行相应的处理。

在 find 命令对查找到的文件执行相应命令前将对您进行提示,这通常是非常有用的,您可以使用 -ok 参数告诉它继续执行该操作,接下来我们将对其进行介绍。

可选的执行。

ok 是 -exec 参数的一个重要的替代项,它的行为和 -exec 一样,但它会提示您是否要对文件运行相应的命令。假设您想要删除 home 目录中的大部分 .txt 文件,但希望能够逐个文件地执行该操作。

像 unix 中的 rm 命令那样的删除操作是很危险的,因为当使用像 find 这样的自动化处理方式来查找文件时,它可能一不小心会删除重要的文件,您也许希望在删除这些系统查找到的文件之前对其进行仔细检查。

下面的命令列出了您的 home 目录中所有的 .txt 文件。要删除这些文件,必须在 find 命令通过列出文件名提示您确认操作时输入 y 或者 y:

它列出了查找到的每个文件,并且系统将暂停以等待您输入 y 或者 y。如果您按下 enter 键,系统将不会删除该文件。清单 1 显示了一些示例结果:

系统将在每个问号之后暂停,在本示例中,每次都按下了 enter 键以继续处理下一个文件。(没有删除任何文件。)-ok 参数允许您控制每个查找到的文件的自动化处理过程,这样就添加了一种避免自动删除文件的安全措施。

如果在使用 -ok 参数时涉及到过多的文件,那么一个好的方法是先运行带 -exec 的 find 命令以列出所有将要删除的文件,然后在经过检查确保其中不会删除重要的文件后,再次运行该命令,其中用 rm 代替 ls。

exec 和 -ok 都非常有用,您必须确定在当前情况下哪一个能够更好的工作。请记住,安全第一!

您可以使用 find 命令执行各种各样的任务。本部分内容提供了使用 find 命令来管理文件系统的几种方式的示例。

为了保持简单,这些示例都避免了使用涉及通过管道将一个命令的输出传递到另一个命令的 -exec 命令。然而,您完全可以根据自己需要在 find 命令的 -exec 子句中使用这样的命令。

您可以使用 find 命令来清除目录或子目录中在正常使用过程中生成的临时文件,这样可以节省磁盘空间。要实现该操作,请使用下面的命令:

括号中的文件掩码标识出了需要删除的文件类型,每个文件掩码的前面都有 -name。该列表可以扩展为包括您需要清除的系统中的任何临时文件类型。在**的编译和连接过程中,程序员及其工具会生成示例中的那些文件类型:

和 core。其他的用户通常也会生成类似的临时文件,可以使用如 *.tmp、*.

junk 等文件掩码来对命令进行相应的编辑。您可能还发现将命令放入一个称作 clean 的脚本中非常有用,当需要清除一个目录中的内容的时候就可以执行该脚本。

find 命令允许您复制目录中的全部内容,同时保持每个文件和子目录的权限、时间和所有权。要完成该操作,需要组合使用 find 和 cpio 命令,如下所示:

cpio 命令是一个复制命令,它设计用来将文件复制到或复制出一个 cpio 或 tar 存档文件,并自动地保持文件和子目录的权限、时间和所有权。

有些人使用每个文本文件的第一行作为标题或者文件内容的描述。可以使用列出文件名和所有文本文件第一行内容的报表更方便地对大量的文本文件进行筛选。下面的命令在报表中列出了您的 home 目录中所有文本文件的第一行内容,便于进一步地根据需要使用 less 命令进行检查:

维护 log 和 tmp 文件的存储空间。

要为生成大量文件的应用程序维护 log 和 tmp 文件存储空间,可以将下列命令放入到每天运行的 cron 任务中:

第一个命令找到 $logdir 目录中所有包含在 24 小时内 (-mtime +0) 进行了修改的数据的目录 (-type d),并对它们进行压缩 (compress -r {}以节省磁盘空间。如果这些目录超过了一个工作周 (-mtime +5),第二个命令则将其删除 (rm -f {}以便增加磁盘上的可用空间。通过这种方式,cron 任务自动地根据您所指定的时间窗口对目录进行维护。

复制复杂的目录树。

如果您想要将复杂的目录树从一台计算机复制到另一台计算机,同时保持副本权限以及 user id 和 group id(uid 和 gid——操作系统所使用的标记文件的所有权的数值),并且不复制用户文件,那么就需要再次使用 find 和 cpio:

查找不指向任何地方的链接。

该命令从最顶层目录 (/开始,列出由 perl 解释器确定不指向任何地方 (-nle '-e ||print') 的所有链接 (-type l -print),关于 unix guru universe 站点中这个技巧的更详细的信息,请参阅参考资料部分。如果您想要删除这些文件,可以进一步使用管道将输出传递到 rm -f {}命令。当然,perl 可以在大多数的 unix 工具包中找到,它是许多功能强大的解释性语言工具中的一种。

搜索高级命令

一 高级搜索指令。1 双引号我们举个例子来说明,seo交友 在百度中这样搜索的话,我们可以看到出现的都是完整而且顺序出现搜索关键字,而不是出现seo,交友,等这些分隔开的页面。使用双引号可以更精准的找到特定关键字的竞争对手。2 减号减号 代表搜索不包括减号后面的词的页面。值得注意的是减号前面需要有个...

PING命令的高级用法

对于windows下ping命令相信大家已经再熟悉不过了,但是能把ping的功能发挥到最大的人却并不是很多,当然我也并不是说我可以让ping发挥最大的功能,我也只不过经常用ping这个工具,也总结了一些小经验,现在和大家分享一下。现在我就参照ping命令的帮助说明来给大家说说我使用ping时会用到的...

UNIX高级操作命令

课程ik000202 issue1.0 目录。课程说明 1 课程介绍 1 课程目标 1 相关资料 1 第1章 shell的基础知识 2 1.1 什么是shell 2 1.2 别名化 3 1.3 shell变量 4 1.3.1 shell变量的存储机制 4 1.3.2 变量替换 4 1.3.3 命令替...