find: 경로는 표현식 앞에 있어야 합니다: `.'find: `-exec' 술어 뒤에 인용되지 않은 패턴이 있을 수 있습니까?

find: 경로는 표현식 앞에 있어야 합니다: `.'find: `-exec' 술어 뒤에 인용되지 않은 패턴이 있을 수 있습니까?

이 명령을 백그라운드에서 실행해야 해요

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"처럼 취급됩니다.

관련 정보