当我使用{}时,Find创建一个文件

时间:2018-09-01 13:34:22

标签: linux shell find

我尝试使用find创建一个非常简单的方法来将换行符添加到文件中。我知道还有很多其他方法可以做到这一点,但是这使我烦恼,我无法获得这种工作方式。 所以-我不是在问如何在文件中添加换行符-我是在问为什么find很奇怪。

os.system("pythontry.py 1")

生成一个名为“ {}”的新文件,并在while内使用换行符(以检查查找结果在我的计算机上是否有效):

find . -type f -iname 'file' -exec echo >> {} \;

打印“ ./文件”。

因此>>使感到困惑。问题是为什么以及如何解决?

2 个答案:

答案 0 :(得分:3)

  

我在问为什么发现很奇怪。

不是。这与find无关。实际上,创建文件后,find甚至还没有开始运行。

>>大致意味着“将标准输出重定向到该文件的末尾,必要时创建一个新文件”。请注意,这与>> left 无关。

重定向是Shell的功能,find对重定向一无所知,而Shell对find则一无所知。 >>不会因为您碰巧打电话给find而神奇地改变了它的含义。它仍然意味着完全相同的东西。

如果要在-exec中使用shell功能,则需要在-exec中使用shell:

find . -type f -iname 'file' -exec sh -c 'echo >> "{}"' \;

答案 1 :(得分:1)

尽管问题本身已经得到解答,但我想指出的是,您不必严格要求find做所有事情,而是可以使用其他可用的工具来与之配合工作,例如例如:

find . -type f -iname 'file' | while read file; do echo >>"$file"; done

此方法还具有不为每个匹配都执行新过程的优点,这种情况下无关紧要,但是如果有数千个匹配并且exec相对较重,则可能很重要。