【发布时间】:2011-05-08 22:46:35
【问题描述】:
我有一个输入(比如说一个文件)。 每行都有一个文件名。 如何读取此文件并显示每个文件的内容。
【问题讨论】:
我有一个输入(比如说一个文件)。 每行都有一个文件名。 如何读取此文件并显示每个文件的内容。
【问题讨论】:
这样的事情会做:
xargs cat <filenames.txt
xargs 程序读取其标准输入,并针对每一行输入运行 cat 程序,并将输入行作为参数。
如果您真的想循环执行此操作,您可以:
for fn in `cat filenames.txt`; do
echo "the next file is $fn"
cat $fn
done
【讨论】:
“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/
【讨论】:
这是一个while 循环:
while read filename
do
echo "Printing: $filename"
cat "$filename"
done < filenames.txt
【讨论】:
read 中使用 '-r' 和 '-d' 选项
xargs --arg-file inputfile cat
这将输出文件名和文件内容:
xargs --arg-file inputfile -I % sh -c "echo %; cat %"
【讨论】:
您可能希望处理文件名中的空格,尽管它们很可恶:-)
所以我最初会选择类似的东西:
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> _
【讨论】:
cat `cat filenames.txt`
会成功的
【讨论】:
如果它们都有相同的扩展名(例如 .jpg),你可以使用这个:
for picture in *.jpg ; do
echo "the next file is $picture"
done
(如果文件名有空格,此解决方案也适用)
【讨论】:
*.jpg 括起来很有用,IIRC:for picture in "*.jpg";...