我想知道{}
这个命令的真正作用以及它是如何工作的:
find .-type f ! -name '*.c' -exec rm {} +
来自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