이 명령을 백그라운드에서 실행해야 해요
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... \;
'찾기' 마법의 세계에 오신 것을 환영합니다. 맨파인드(Man Find)를 다시 읽어보세요.
당신의 sed
표현이 잘못되었습니다. 그것은해야한다:
sed -e 's/domain1\.it/domain2\.com/'
백슬래시( \
)는 단순히 다음 문자의 "특수 처리" 플래그를 뒤집으므로 domain1\it
" domain1it
"가 아니라 " domain1.it
"와 일치합니다. " \i
"는 특별하지 않으므로 " i
"처럼 취급됩니다.