Réponses:
Quelque chose comme ça ferait:
xargs cat <filenames.txt
Le xargs
programme lit son entrée standard, et pour chaque ligne d'entrée exécute le cat
programme avec les lignes d'entrée comme argument (s).
Si vous voulez vraiment faire cela en boucle, vous pouvez:
for fn in `cat filenames.txt`; do
echo "the next file is $fn"
cat $fn
done
"foreach" n'est pas le nom de bash. C'est simplement «pour». Vous pouvez faire des choses en une seule ligne comme:
for fn in `cat filenames.txt`; do cat "$fn"; done
Référence: http://www.cyberciti.biz/faq/linux-unix-bash-for-loop-one-line-command/
Voici une while
boucle:
while read filename
do
echo "Printing: $filename"
cat "$filename"
done < filenames.txt
read
xargs --arg-file inputfile cat
Cela affichera le nom du fichier suivi du contenu du fichier:
xargs --arg-file inputfile -I % sh -c "echo %; cat %"
Vous voudrez probablement gérer les espaces dans vos noms de fichiers, aussi odieux soient-ils :-)
J'opterais donc au départ pour quelque chose comme:
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> _