Відповіді:
Щось подібне зробить:
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 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> _