जवाबों:
कुछ ऐसा होगा:
xargs cat <filenames.txt
xargs
कार्यक्रम अपने मानक इनपुट पढ़ता है, और इनपुट की प्रत्येक पंक्ति में चलाता cat
तर्क (रों) के रूप में इनपुट लाइनों के साथ कार्यक्रम।
यदि आप वास्तव में एक पाश में यह करना चाहते हैं, तो आप कर सकते हैं:
for fn in `cat filenames.txt`; do
echo "the next file is $fn"
cat $fn
done
"फॉरचेट" बैश का नाम नहीं है। यह बस "के लिए" है। आप केवल एक पंक्ति में काम कर सकते हैं जैसे:
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
read
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> _
यदि उन सभी का विस्तार समान है (उदाहरण के लिए .jpg), तो आप इसका उपयोग कर सकते हैं:
for picture in *.jpg ; do
echo "the next file is $picture"
done
(यह समाधान भी काम करता है यदि फ़ाइलनाम में स्थान हो)