所以我有以下命令查找一系列文件,并在找到的所有内容的末尾附加三行。按预期工作。
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
。
我将如何实现目标?
提前致谢!
答案 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
以完成目标的失败。