find: os caminhos devem preceder a expressão: `.'find: possível padrão sem aspas após o predicado `-exec'?

find: os caminhos devem preceder a expressão: `.'find: possível padrão sem aspas após o predicado `-exec'?

eu preciso executar em segundo plano este comando

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

mas tenho dois problemas:

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

E, novamente, existem outras maneiras inteligentes de “encontrar e substituir” mais rapidamente, para fazer isso:sudo find '/abc/abc/' -type f -exec sed 's/domain1\it/domain2\com/g' '{}' ; &talvez com grep?

Obrigado

Responder1

É /abc/abc/um diretório existente? Onde estão os arquivos a serem pesquisados? A paths must preceed..mensagem " " é uma mensagem criptografada. Decodificado significa que o primeiro (ou vários) parâmetros findnão é uma árvore de diretórios para findpercorrer. Como o resto dos parâmetros são " findexpressões", é disso que reclama.

O comando que você está -execexecutando precisa ser finalizado com um ponto e vírgula ( ;). Mas, como um ponto-e-vírgula encerraria (a análise) do findcomando, -execo ponto-e-vírgula de deve ser escapado com uma barra invertida ( \). por isso

-exec ...command... \; Bem-vindo ao mundo da magia `encontrar`. Releia `man find`.

Sua sedexpressão está errada. Deveria ser:

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

A barra invertida ( \) simplesmente inverte o sinalizador de "manuseio especial" no próximo caractere, de modo que domain1\itcorresponda a " domain1it", não a " domain1.it". " \i" não é especial, então é tratado como " i".

informação relacionada