[bash] 배쉬 foreach 루프

입력이 있습니다 (파일이라고합시다). 각 줄에는 파일 이름이 있습니다. 이 파일을 읽고 각 파일의 내용을 표시하려면 어떻게해야합니까?



답변

이와 같은 일이 있습니다.

xargs cat <filenames.txt

xargs프로그램은 표준 입력을 판독하고, 입력의 각 행에 대해 실행 cat인수 (들)와 같은 입력 라인 프로그램.

루프에서 실제로이 작업을 수행하려는 경우 다음을 수행 할 수 있습니다.

for fn in `cat filenames.txt`; do
    echo "the next file is $fn"
    cat $fn
done


답변

“foreach”는 bash의 이름이 아닙니다. 단순히 “for”입니다. 한 줄로만 다음을 수행 할 수 있습니다.

for fn in `cat filenames.txt`; do cat "$fn"; done

참조 : http://www.cyberciti.biz/faq/linux-unix-bash-for-loop-one-line-command/


답변

while루프 는 다음과 같습니다 .

while read filename
do
    echo "Printing: $filename"
    cat "$filename"
done < filenames.txt


답변

xargs --arg-file inputfile cat

파일 이름과 파일 내용이 출력됩니다.

xargs --arg-file inputfile -I % sh -c "echo %; cat %"


답변

파일 이름에서 공백을 처리하고 싶을 것입니다.

그래서 처음에는 다음과 같은 것을 선택했습니다.

pax> cat qq.in
normalfile.txt
file with spaces.doc

pax> sed 's/ /\\ /g' qq.in | xargs -n 1 cat
<<contents of 'normalfile.txt'>>
<<contents of 'file with spaces.doc'>>

pax> _


답변

cat `cat filenames.txt`

트릭을 할 것입니다


답변

확장자가 모두 같은 경우 (예 : .jpg) 다음을 사용할 수 있습니다.

for picture in  *.jpg ; do
    echo "the next file is $picture"
done

(이 솔루션은 파일 이름에 공백이있는 경우에도 작동합니다)