Odpowiedzi:
Coś takiego zrobiłoby:
xargs cat <filenames.txt
xargs
Program odczytuje swoje standardowe wejście, a dla każdej linii wejścia uruchamia cat
program z linii wejściowych jako argument (y).
Jeśli naprawdę chcesz to robić w pętli, możesz:
for fn in `cat filenames.txt`; do
echo "the next file is $fn"
cat $fn
done
„foreach” nie jest nazwą bash. Jest po prostu „za”. W jednej linii możesz wykonywać czynności, takie jak:
for fn in `cat filenames.txt`; do cat "$fn"; done
Źródła: http://www.cyberciti.biz/faq/linux-unix-bash-for-loop-one-line-command/
Oto while
pętla:
while read filename
do
echo "Printing: $filename"
cat "$filename"
done < filenames.txt
read
xargs --arg-file inputfile cat
Spowoduje to wyświetlenie nazwy pliku, a po niej zawartości pliku:
xargs --arg-file inputfile -I % sh -c "echo %; cat %"
Prawdopodobnie będziesz chciał obsłużyć spacje w nazwach plików, choć są one odrażające :-)
Więc początkowo wybrałbym coś takiego:
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> _