Bash foreach 循环

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

357222 次浏览

像这样的东西会做:

xargs cat <filenames.txt

xargs程序读取其标准输入,对于每一行输入,以输入行作为参数运行 cat程序。

如果你真的想循环执行,你可以:

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

您可能希望在文件名中处理空格,尽管它们令人厌恶: -)

所以我一开始会选择这样的东西:

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

这是一个 while循环:

while read filename
do
echo "Printing: $filename"
cat "$filename"
done < filenames.txt
xargs --arg-file inputfile cat

这将输出文件名后跟文件内容:

xargs --arg-file inputfile -I % sh -c "echo %; cat %"

“ foreach”不是 bash 的名字。它只是“为了”。你可以只用一句话做事,比如:

for fn in `cat filenames.txt`; do cat "$fn"; done

参考资料: http://www.cyberciti.biz/faq/linux-unix-bash-for-loop-one-line-command/

cat `cat filenames.txt`

会有用的

如果它们都有相同的扩展名(例如.jpg) ,您可以使用以下命令:

for picture in  *.jpg ; do
echo "the next file is $picture"
done

(如果文件名有空格,此解决方案也可以工作)