使用 UNIX find 命令的高级技术

【使用 UNIX find 命令的高级技术】没有什么能比得上探索和发现新的人、地方、事物所带来的刺激 。领域可能有所不同,但有些原则却是一样的 。在这些原则中,有一条是记录下您的旅程,另一条则是了解和使用工具 。
Unix?操作系统很像一片广阔的、未经标识的荒野 。当您在这样的领域中旅行时,可以选择一些日后能够给您带来帮助的工具 。find 命令便是这样一种工具 。find 命令不仅能够简单地用来定位文件,正如本文将介绍的那样,它还可以自动地执行其他 UNIX 命令的序列,其中使用所查找到的文件名作为输入 。
Find 的有关限制
所有称职的操作系统都具有协助您查找相关内容的工具 。与大多数工具不同的是,UNIX 中的 find 命令可以自动地对其查找到的文件执行许多操作 。
图形用户界面 (GUI) 中的标准 find 工具允许您对所查找到的文件进行一些常规操作任务:您可以将它们标记为剪切、复制和粘贴,您可以将它们移动到一个新的位置,并且可以使用创建它们的应用程序来打开它们 。这些操作涉及到两个或更多的步骤,并且不是自动完成的,即首先查找到文件,然后使用 GUI 为下一步的操作对它们进行标记 。这种方法对许多用户来说没有问题,但是 Explorer 需要的不仅是这些 。
UNIX 的 find 命令可以删除、复制、移动和执行其查找到的文件 。另外,使用 -exec 参数可以根据您所需要的 UNIX 命令的序列来自动地运行这些文件 。它甚至可以在对任何文件执行这些操作前,进一步让您进行确认 。
简化文件系统的管理
与大多数 UNIX 命令一样,UNIX find 命令具有一长串令人生畏的选项和开关,它们会阻碍人们深入地学习该命令,但正是因为其范围广阔,真正的 Explorer 并不会被它们吓倒 。一条好的通用原则在简化一个复杂问题时都会经过漫长的过程 。启动一个 xterm,并尝试执行下面的命令:
$ find . -name *.gif -exec ls {} ;
-exec 参数中包含了真正有价值的操作 。当查找到匹配搜索条件的文件时,-exec 参数定义了将对这些文件进行什么操作 。该示例告诉计算机进行如下操作:
从当前文件夹开始往下搜索,紧跟在 find 之后,使用点号 (.) 。
定位所有名称以 .gif 结尾的文件(图形文件) 。
列出所有查找到的文件,使用 ls 命令 。
需要对 -exec 参数进行更深入地研究 。当查找到匹配搜索条件的文件名时,find 命令执行 ls {} 字符串,用文件名和路径代替文本 {} 。假设在搜索中查找到 saturn.gif 文件,find 将执行如下所示的命令:
$ ls ./gif_files/space/solar_system/saturn.gif
本文余下的内容建立在这条一般原则之上:仔细地使用 find 命令可以让 Unix 文件系统的管理工作变得更加容易 。例如,如果您使用了 -fstype 参数,find 命令可以根据查找到的文件所处的文件系统的类型来对命令进行相应的处理 。在 find 命令对查找到的文件执行相应命令前将对您进行提示,这通常是非常有用的,您可以使用 -ok 参数告诉它继续执行该操作,接下来我们将对其进行介绍 。
可选的执行
-ok 是 -exec 参数的一个重要的替代项,它的行为和 -exec 一样,但它会提示您是否要对文件运行相应的命令 。假设您想要删除 home 目录中的大部分 .txt 文件,但希望能够逐个文件地执行该操作 。像 UNIX 中的 rm 命令那样的删除操作是很危险的,因为当使用像 find 这样的自动化处理方式来查找文件时,它可能一不小心会删除重要的文件,您也许希望在删除这些系统查找到的文件之前对其进行仔细检查 。
下面的命令列出了您的 home 目录中所有的 .txt 文件 。要删除这些文件,必须在 find 命令通过列出文件名提示您确认操作时输入 Y 或者 y:

推荐阅读