2010-11-12 215 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` 

會做的伎倆