find에서 commandX로의 파이핑 명령에 대해 혼란스러우신가요?

find에서 commandX로의 파이핑 명령에 대해 혼란스러우신가요?

run.sh다음과 같은 스크립트가 있습니다 .

#!/bin/bash
FILES=$(find corpus/ -type f)
for i in $FILES
do
    ./individual.sh $i
done

문제없이 실행됩니다.

각 파일을 find에서 으로 전송하고 싶습니다 ./individual.

나는 이것을 할 수 있다고 생각합니다 :

find corpus/ -type f | ./individual.sh

하지만 시도해 보면 ""라는 파일만 파이프로 연결됩니다(오류 발생).

올바른 구문은 무엇입니까?

답변1

find 옵션을 사용해야 합니다 -exec:

find corpus/ -type f -exec ./individual.sh {} \;

발견된 각 일치 항목 에 대해 findpersonal.sh를 실행하고 이를 {}발견된 파일 이름으로 바꿉니다. \;이렇게 해서 exec찾기가 끝납니다.

파이프가 작동하지 않는 이유는 find 출력이 individual.sh매개변수가 아닌 STDIN을 통해 제공되기 때문입니다. 스크립트를 사용하려면 STDIN을 통해 입력 또는 매개변수를 조회하는 방법을 알아야 합니다.

관련 정보