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

标签 linux shell find

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

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

结果会创建一个名为“{}”的新文件,其中包含换行符(以检查 find 在我的计算机上是否有效):

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

打印“./file”。

所以 >> 使 find 变得困惑。问题是为什么以及如何解决这个问题?

最佳答案

I'm asking why find is weird.

事实并非如此。这与find无关。事实上,当文件创建时,find 甚至还没有开始运行。

>> 大致意思是“将 stdout 重定向到该文件的末尾,必要时创建一个新文件”。请注意,这与 >>左侧没有任何关系。

重定向是 shell 的一项功能,find 对重定向一无所知,并且 shell 对 find 一无所知。 >> 不会仅仅因为您碰巧调用了 find 就神奇地改变了它的含义。它仍然意味着完全相同的事情。

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

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

关于linux - 当我使用 {} 时,Find 会创建一个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52128614/

相关文章:

linux - LINUX 中 SIGCONT 和 waitpid() 的问题

python - 如何在 Linux 中使用 PyInstaller 编译 python

VB.NET 谓词数组查找

bash - 找到 exec ls : No such file or directory

puttygen 中使用 linux ssh key 返回错误

c++ - 将 C++ 代码与 Linux 上的任何 Web 技术集成

bash - 我可以在多行命令中使用 $( ... ) 语法吗?

linux - Linux shell 脚本中的 Pascal 三角形

bash - 以特定方式读取脚本的输出

MySQL查询查找已下0订单/无订单的客户