Antworten:
So etwas würde reichen:
xargs cat <filenames.txt
Das xargs
Programm liest seine Standardeingabe und führt für jede Eingabezeile das cat
Programm mit den Eingabezeilen als Argument (e) aus.
Wenn Sie dies wirklich in einer Schleife tun möchten, können Sie:
for fn in `cat filenames.txt`; do
echo "the next file is $fn"
cat $fn
done
"foreach" ist nicht der Name für bash. Es ist einfach "für". Sie können Dinge in einer Zeile nur wie folgt tun:
for fn in `cat filenames.txt`; do cat "$fn"; done
Referenz: http://www.cyberciti.biz/faq/linux-unix-bash-for-loop-one-line-command/
Hier ist eine while
Schleife:
while read filename
do
echo "Printing: $filename"
cat "$filename"
done < filenames.txt
read
xargs --arg-file inputfile cat
Dadurch wird der Dateiname gefolgt vom Inhalt der Datei ausgegeben:
xargs --arg-file inputfile -I % sh -c "echo %; cat %"
Sie werden wahrscheinlich Leerzeichen in Ihren Dateinamen behandeln wollen, obwohl sie abscheulich sind :-)
Also würde ich mich zunächst für etwas entscheiden wie:
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> _