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 find
não é uma árvore de diretórios para find
percorrer. Como o resto dos parâmetros são " find
expressões", é disso que reclama.
O comando que você está -exec
executando precisa ser finalizado com um ponto e vírgula ( ;
). Mas, como um ponto-e-vírgula encerraria (a análise) do find
comando, -exec
o 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 sed
expressã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\it
corresponda a " domain1it
", não a " domain1.it
". " \i
" não é especial, então é tratado como " i
".