查找:路径必须在表达式之前:'。'查找:谓词'-exec'之后可能存在未引用的模式?

查找:路径必须在表达式之前:'。'查找:谓词'-exec'之后可能存在未引用的模式?

我需要在后台执行这个命令

sudo find '/abc/abc/' -type f -exec sed 's/domain1\it/domain2\com/g' '{}' \; . &

但我有两个问题:

find: paths must precede expression: `.'
find: possible unquoted pattern after predicate `-exec'?

再次强调,还有其他更快捷的“查找和替换”的智能方法,例如:sudo find '/abc/abc/' -type f -exec sed 's/domain1\it/domain2\com/g' '{}' ; &也许用 grep?

谢谢

答案1

/abc/abc/现有目录吗?要搜索的文件在哪里?“ paths must preceed..”消息是加密消息。解码后,意味着第一个(或前几个)参数find不是要遍历的目录树find。由于其余参数是“find表达式”,因此它抱怨的就是这个。

您正在执行的命令-exec需要以分号 ( ) 结尾;。但是,由于分号会终止(解析)命令find-exec因此必须使用反斜杠 ( \) 对分号进行转义。因此

-exec ...command... \; 欢迎来到“find”魔法的世界。重读“man find”。

你的sed表述有误。应该是:

 sed -e 's/domain1\.it/domain2\.com/'

反斜杠 ( \) 只是翻转下一个字符上的“特殊处理”标志,因此domain1\it匹配“ domain1it”,而不是“ domain1.it”。 “ \i”并不特殊,因此它被视为“ i”。

相关内容