编辑find -exec echo命令以包含字符串的grep

时间:2014-12-17 18:34:59

标签: bash grep find exec

所以我有以下命令查找一系列文件,并在找到的所有内容的末尾附加三行。按预期工作。

find /directory/ -name "file.php" -type f -exec sh -c "echo -e 'string1\string2\nstring3\n' >> {}" \;

我需要做的是在file.php 之前的查找输出中查找string1,string2或string3的任何实例,以回显/追加这些行,这样我就不会不必要地追加文件。 (这是在crontab中运行的)

| grep -v "string"中断find命令后使用-exec

我将如何实现目标?

提前致谢!

1 个答案:

答案 0 :(得分:0)

对于带空格的字符串,-exec命令不安全。

你想要这样的东西(假设发现任何字符串是不添加任何字符串的原因)。

find /directory/ -name "file.php" -type f -exec sh -c "grep -q 'string1|string2|string3' \"\$1\" || echo -e 'string1\nstring2\nstring3\n' >> \"\$1\"" - {} \;

解释安全问题。

find{}放在它作为单个参数运行的命令中,但是当你将其打印成双引号字符串时,你将失去这种好处。

所以不要这样做,而是将文件作为参数传递给shell,然后使用带引号的shell命令中的位置参数。

上面的命令只是将echo链接到grep以完成目标的失败。