입력이 있습니다 (파일이라고합시다). 각 줄에는 파일 이름이 있습니다. 이 파일을 읽고 각 파일의 내용을 표시하려면 어떻게해야합니까?
답변
이와 같은 일이 있습니다.
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
(이 솔루션은 파일 이름에 공백이있는 경우에도 작동합니다)