我想知道{}
在这个命令中真正做了什么以及它是如何工作的:
find .-type f ! -name '*.c' -exec rm {} +
答案 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