我需要在後台執行這個指令
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... \;
歡迎來到「尋找」魔法的世界。重新閱讀“人發現”。
你的sed
表達方式是錯誤的。它應該是:
sed -e 's/domain1\.it/domain2\.com/'
反斜線 ( \
) 只是翻轉下一個字元上的“特殊處理”標誌,因此domain1\it
匹配“ domain1it
”,而不是“ domain1.it
”。 " \i
" 並非特殊,因此視為 " i
"。