2010-11-12 180 views
108

我有一个输入(比方说一个文件)。 每行都有一个文件名。 如何读取该文件并显示每个文件的内容。Bash foreach循环

回答

178

像这样会做:

xargs cat <filenames.txt 

xargs程序读取它的标准输入,以及用于输入的每一行运行cat程序与输入线作为参数(一个或多个)。

如果你真的想这样做在一个循环中,您可以:

for fn in `cat filenames.txt`; do 
    echo "the next file is $fn" 
    cat $fn 
done 
3

你可能会想处理空格在文件名中,可恶的虽然都是:-)

所以我最初会选择类似:

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> _ 
12

这里是一个while循环:

while read filename 
do 
    echo "Printing: $filename" 
    cat "$filename" 
done < filenames.txt 
+0

这应该是最好的办法。你可以用'-r'和'-d'选项'read' – sjsam 2016-05-21 06:23:49

4
xargs --arg-file inputfile cat 

这将输出文件名,然后该文件的内容:

xargs --arg-file inputfile -I % sh -c "echo %; cat %" 
3
cat `cat filenames.txt` 

会做的伎俩