sed:无法读取:没有那个文件或目录。

7
我正在运行以下命令:
find . -name '*.html' -exec sed "s/foo/bar/g" {} \;

文件结构如下所示:

./two/three.html
./two/two.html
./two/one.html
./three/three.html
./three/two.html
./three/one.html
./one/three.html
./one/two.html
./one/one.html

然而,sed返回说找不到文件,即使这两个命令单独使用都可以正常工作(也就是说,我可以单独运行查找,也可以单独运行sed)。
我曾经和同事一起查看过它,但他也被难住了。最终我采取了不同的方法,但我仍然想知道这里到底出了什么问题。

如果你去掉-print部分会怎样?在我看来,这似乎是不必要的。 - fedorqui
print会在sed执行操作之前打印文件的名称。这很可能是OP想要的东西。 - jaypal singh
假设您真的使用sed -i来“保存原地”,否则在您的示例中输出将去哪里。我认为@fedorqui有点眉目了。祝好运。 - shellter
我添加了“-print”以确保它能够访问文件。但是当我将其删除时,结果仍然相同。 - Zac Lozano
2
可能是未加引号的大括号造成了问题。请尝试使用:-exec sed 's/foo/bar/g' '{}' \; - glenn jackman
显示剩余2条评论
1个回答

4
感谢 Glenn Jackman 的建议:
我需要在括号周围加上引号,如下所示:
-exec sed "s/foo/bar/g" '{}' \;

与其最初发布的方式不同。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接