![find에서 commandX로의 파이핑 명령에 대해 혼란스러우신가요?](https://linux55.com/image/58170/find%EC%97%90%EC%84%9C%20commandX%EB%A1%9C%EC%9D%98%20%ED%8C%8C%EC%9D%B4%ED%95%91%20%EB%AA%85%EB%A0%B9%EC%97%90%20%EB%8C%80%ED%95%B4%20%ED%98%BC%EB%9E%80%EC%8A%A4%EB%9F%AC%EC%9A%B0%EC%8B%A0%EA%B0%80%EC%9A%94%3F.png)
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 {} \;
발견된 각 일치 항목 에 대해 find
personal.sh를 실행하고 이를 {}
발견된 파일 이름으로 바꿉니다. \;
이렇게 해서 exec
찾기가 끝납니다.
파이프가 작동하지 않는 이유는 find 출력이 individual.sh
매개변수가 아닌 STDIN을 통해 제공되기 때문입니다. 스크립트를 사용하려면 STDIN을 통해 입력 또는 매개변수를 조회하는 방법을 알아야 합니다.