![find 명령의 파일을 각 파일이 큰따옴표 안에 있는 한 줄로 그룹화하는 방법은 무엇입니까? [복사]](https://linux55.com/image/185235/find%20%EB%AA%85%EB%A0%B9%EC%9D%98%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EA%B0%81%20%ED%8C%8C%EC%9D%BC%EC%9D%B4%20%ED%81%B0%EB%94%B0%EC%98%B4%ED%91%9C%20%EC%95%88%EC%97%90%20%EC%9E%88%EB%8A%94%20%ED%95%9C%20%EC%A4%84%EB%A1%9C%20%EA%B7%B8%EB%A3%B9%ED%99%94%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
이는 find를 사용하여 찾은 파일을 반복하거나 조작할 때 자주 직면하는 문제입니다.
다음 파일이 있습니다.
$ find . -name "*ES 03-11*"
./01jan/ES 03-11.txt
./02feb/ES 03-11.txt
./03mar/ES 03-11.txt
./04apr/ES 03-11.txt
./05may/ES 03-11.txt
다음 명령을 실행하고 싶습니다.
$ cat "./01jan/ES 03-11.txt" "./02feb/ES 03-11.txt" "./03mar/ES 03-11.txt" "./04apr/ES 03-11.txt" "./05may/ES 03-11.txt" | process
이는 find에서 제공한 각 줄을 연결하는 것을 의미하지만 큰 따옴표나 간단한 따옴표로 묶여 있습니다.
나는 이것을 시도했습니다 :
find . -name "*ES 03-11*" | awk '{printf "\"%s\" ", $0}' | xargs cat | process
이것은 작동하는 것 같지만 awk를 사용하지 않거나 기억하기 쉬운 작업이나 입력을 하지 않고 수행할 수 있는 다른 방법이 있는지 궁금합니다.
저는 FreeBSD와 Bourne Shell을 사용하고 있습니다.
답변1
요약하면 다음 -exec
방법을 사용할 수 있습니다.
find . -name "*ES 03-11*" -exec cat {} +
또는 xargs
방법:
find . -name "*ES 03-11*" | xargs -I xx cat xx
답변2
이것이 바로 NULL 종료의 목적입니다. find -print0
불행 하게도 xargs
FreeBSD에는 일치하는 명령이 없는 것 같습니다 . 이는 어떤 솔루션에도 포함되지 -0
않습니다 .xargs
또 다른 해결책은 패턴을 반복하는 것입니다.
for file in */*'ES 03-11'*; do cat "$file"; done | process
또는 많은 파일의 경우
for dir in *
do
[ -d "$dir" ] || continue
for file in "$dir"/*'ES 03-11'*
do
[ -f "$file" ] && cat "$file"
done
done | process
아니면 직접이라도
cat */*'ES 03-11'* | process