스크립트에서 find -exec를 사용하세요.

스크립트에서 find -exec를 사용하세요.

저는 오랜 find사용자 이지만 스크립트에서 명령을 실행해 보는 것은 bash이번이 처음인 것 같습니다 .find

여러 함수에 전달된 첫 번째 인수를 찾기 위해 모든 프로젝트 소스 파일을 반복하려고 합니다. 나는 작업을 수행하는 것처럼 보이는 작은 awk 스크립트를 작성하고 테스트했습니다. 다음을 통해 명령줄에서 실행할 수 있습니다.

find sources -name '*.cpp' -exec awk -f foo.awk {} \;

문제는 다음을 통해 스크립트에 넣으려고 할 때 발생합니다.

echo find sources -name *.cpp -exec awk -f foo.awk {} \\\; >foo.sh

이런 식으로 foo.sh에는 다음이 포함됩니다.

find sources -name *.cpp -exec awk -f foo.awk {} \;

이제 다음을 통해 bash 쉘에 소스를 입력하면

source foo.sh

오류가 발생했습니다.

찾기: '-exec' 인수 누락

인용 문제인 줄 알고 마지막 세미콜론 앞에 백슬래시를 두 배로 늘렸습니다. 아무런 차이가 없습니다. 그냥 웃기기 위해 백슬래시를 세 배로 늘려 보았습니다. 여전히 차이가 없습니다.

전체 공개: 저는 GNU Awk 5.1.0을 사용하여 cygwin에서 Windows 10을 실행하고 있습니다. 저는 스크립팅에 cat을 사용하고 있으므로 줄 끝 문제를 해결해야 합니다.

고쳐 쓰다

하지만 저는 그렇게 하지 않습니다. 다른 awk 스크립트를 사용하여 실행하면 방금 이 질문에 붙여넣은 스크립트가 제대로 작동합니다. 내일 다시 시도해 보고 결과를 게시하겠습니다.

귀하의 관용에 감사드립니다.

답변1

이는 따옴표가 없기 때문에 *.cpp전달되기 전에 확장되거나 현재 디렉터리에 파일이 있는 find경우 *cpp스크립트에 기록되기 전에도 발생하기 때문입니다.

내가 옳다면 이것이 당신에게 필요한 일을 해야 합니다:

echo "find sources -name '*.cpp' -exec awk -f foo.awk {} \;" >foo.sh

관련 정보