预定义操作
让我们完成一些工作吧! 获得我们的结果列表 发现 命令很有用,但我们真正想做的是对列表中的项目进行操作。 幸运的是, 发现 允许根据搜索结果执行操作。 有一组预定义的操作和几种应用用户定义操作的方法。 首先让我们看看一些预定义的操作:
表 17-6:预定义的查找操作
动作说明
动作说明
-delete 删除当前匹配的文件。
-ls 执行相当于 LS-迪尔斯 在匹配文件上。
输出被发送到标准输出。
-print 将匹配文件的完整路径名输出到标准输出。 如果未指定其他操作,则这是默认操作。
-quit 匹配完成后退出。
与测试一样,还有更多操作。 见 发现 完整详细信息的手册页。 在我们的第一个例子中,我们这样做了:
找~
找~
它生成了我们主目录中包含的每个文件和子目录的列表。 它产生了一个清单,因为 -打印 如果未指定其他操作,则隐含操作。 因此,我们的命令也可以表示为:
查找 ~ -print
查找 ~ -print
我们可以使用 发现 删除符合特定条件的文件。 例如,删除文件
有文件扩展名“.BAK”(通常用于指定备份文件),我们可以使用以下命令:
find ~ -type f -name '*.BAK' -delete
find ~ -type f -name '*.BAK' -delete
在这个例子中,在用户的主目录(及其子目录)中的每个文件都被搜索以结尾的文件名 .BAK文件. 当它们被找到时,它们将被删除。
警告: 不用说,你应该 请格外小心 使用时 -删除 行动。 始终首先通过替换命令来测试命令
-print 用于 -delete 的操作以确认搜索结果。
在我们继续之前,让我们再看看逻辑运算符如何影响动作。 考虑以下命令:
find ~ -type f -name '*.BAK' -print
find ~ -type f -name '*.BAK' -print
正如我们所见,此命令将查找名称以 .BAK 结尾的每个常规文件(-type f)(-name '*.BAK') 并将每个匹配文件的相对路径名输出到标准输出 (-print)。 但是,命令执行它的方式的原因是由每个测试和操作之间的逻辑关系决定的。 请记住,默认情况下,每个测试和操作之间都存在隐含的关系。 我们也可以这样表达命令,让逻辑关系更容易看出来:
find ~ -type f -and -name '*.BAK' -and -print
find ~ -type f -and -name '*.BAK' -and -print
充分表达我们的命令后,让我们看看逻辑运算符如何影响其执行:
仅在以下情况下才执行测试/操作...
仅在以下情况下才执行测试/操作...
-打印 -type f 和 -name '*.BAK' 为真
-名称'*.BAK' -类型 f 是真的
-类型 f 总是执行,因为它是第一个测试/操作
-和关系。
由于测试和操作之间的逻辑关系决定了它们中的哪些被执行,我们可以看出测试和操作的顺序很重要。 例如,如果我们要重新排序测试和操作,以便 -打印 action 是第一个,命令的行为会有很大不同:
find ~ -print -and -type f -and -name '*.BAK'
find ~ -print -and -type f -and -name '*.BAK'
此版本的命令将打印每个文件( -打印 action 总是评估为真),然后测试文件类型和指定的文件扩展名。