1

我想知道{}这个命令的真正作用以及它是如何工作的:

find .-type f ! -name '*.c' -exec rm {} +
4

1 回答 1

2

来自man find

-执行命令;

执行命令;如果返回 0 状态,则为 true。所有以下要查找的参数都被视为命令的参数,直到由“;”组成的参数 遇到。字符串 '{}' 被当前文件名替换为正在处理的当前文件名,它出现在命令的参数中,而不仅仅是在单独的参数中,如在某些版本的 find 中。这两种结构都可能需要转义(使用“\”)或引用以保护它们不被 shell 扩展。

-exec 命令 {} +

-exec 操作的这个变体在选定的文件上运行指定的命令,但命令行是通过在末尾附加每个选定的文件名来构建的;该命令的调用总数将远少于匹配文件的数量。命令行的构建方式与 xargs 构建其命令行的方式非常相似。命令中只允许有一个“{}”实例。该命令在起始目录中执行。

所以它所做的就是使用find命令的结果作为rm执行的参数。

然后,完整的命令

find .-type f ! -name '*.c' -exec rm {} +

将在当前目录结构中查找文件。它将匹配那些没有以 .结尾的名称.c。对于所有结果,它将执行rm命令,因此*.c将删除所有非文件。

例子:

$ find . -type f
./two/three
./something
$ find . -type f -exec ls -ltr {} +
-rw-rw-r-- 1 me me 0 Sep 30 11:37 ./something
-rw-r--r-- 1 me me 0 Nov  1 17:50 ./two/three
于 2013-11-13T10:11:21.650 回答