我需要在后台执行这个命令
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
”。