在find命令中'{}'的含义是什么?

时间:2013-11-13 10:09:04

标签: linux shell find

我想知道{}在这个命令中真正做了什么以及它是如何工作的:

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

1 个答案:

答案 0 :(得分:2)

来自man find

  

-exec command;

     

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

  

-exec command {} +

     

-exec操作的此变体运行指定的命令   选定的文件,但命令行是通过附加每个文件来构建的   最后选择的文件名;调用的总数   命令将远远小于匹配文件的数量。该   命令行的构建方式与xargs构建它的方式大致相同   命令行。只允许一个“{}”实例   命令。该命令在起始目录中执行。

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

然后,完整的命令

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

将在当前目录结构中查找文件。它将匹配名称以.c结尾的 not 。对于所有结果,它将执行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