STDIN에서 파일을 가져오고 모든 파일에 대해 한 번에 일부 작업을 수행하는 스크립트

STDIN에서 파일을 가져오고 모든 파일에 대해 한 번에 일부 작업을 수행하는 스크립트

나는 종종 결과 파일 find이나 fd다음과 같은 것을 편집하고 싶습니다.

fd myfile | my_script

내 스크립트에서는 vimSTDIN의 모든 파일이 매개변수(예: )로 실행됩니다 vim "myfile1" "myfile2". 이러한 매개변수에는 공백 및 기타 특수 문자가 포함될 수 있으므로 개별적으로 큰따옴표로 묶어야 합니다.

나는 다음을 시도했습니다 :

files=""
while IFS=$'\n' read -r line; do
    files="$files $line"
done

file $files

예제는 file결과 파일 이름을 인수로 사용하여 실행되어야 합니다. 파일 이름의 공백으로 인해 문제가 발생한다는 점을 제외하고는 다소 작동하며 다양한 방법으로 변수를 참조하려고 시도했지만 성공하지 못했습니다.

줄바꿈으로 구분된 입력을 공백이 있는 인수로 사용하여 명령을 실행하는 방법은 무엇입니까?

답변1

이미 그랬듯 bash이 배열을 사용하십시오.

files=()
while IFS=$'\n' read -r line; do
    files+=( "$line" )
done

file "${files[@]}"

xargs개행 구분 기호를 사용하여 동작이 유사해야 하는지 확인할 수도 있습니다 .

관련 정보