мне нужно выполнить эту команду в фоновом режиме
sudo find '/abc/abc/' -type f -exec sed 's/domain1\it/domain2\com/g' '{}' \; . &
но у меня есть две проблемы:
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... \;
Добро пожаловать в мир магии `найти`. Перечитайте `человека найти`.
Ваше sed
выражение неверно. Должно быть:
sed -e 's/domain1\.it/domain2\.com/'
Обратная косая черта ( \
) просто меняет флаг «специальной обработки» на следующий символ, поэтому domain1\it
соответствует « domain1it
», а не « domain1.it
». « \i
» не является специальным символом, поэтому обрабатывается как « i
».