find: пути должны предшествовать выражению: `.'find: возможный шаблон без кавычек после предиката` -exec '?

мне нужно выполнить в фоновом режиме эту команду

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

, но у меня есть два i ssues:

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?

Спасибо

0
задан 30 April 2021 в 17:47

1 ответ

Является ли / abc / abc / существующим каталогом? Где искать файлы? Сообщение « пути должны предшествовать .. » является криптосообщением. Декодированный это означает, что первый (или первые несколько) параметров для 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 ».

0
ответ дан 7 May 2021 в 17:42

Другие вопросы по тегам:

Похожие вопросы: