мне нужно выполнить в фоновом режиме эту команду
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?
Спасибо
Является ли / 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
».