このコマンドをバックグラウンドで実行する必要があります
sudo find '/abc/abc/' -type f -exec sed 's/domain1\it/domain2\com/g' '{}' \; . &
しかし、2つの問題があります。
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
。