Bash脚本需求:遍历当前目录文件并输出文件名及前10行
问题修正:遍历文件并输出文件名+前10行
你的原代码问题出在echo "$f" | cat $f这一行:管道会把echo输出的文件名作为cat的输入内容,而不是先打印文件名再读取文件本身,导致文件名没有被正确输出。
修正后的代码
for f in *; do if [ -f "$f" ]; then echo "$f" head -n 10 "$f" fi done > output.txt
代码说明
echo "$f":直接打印当前文件名,满足“先输出文件名”的要求head -n 10 "$f":直接读取文件$f的前10行,不需要额外调用cat(head本身支持直接读取文件,用cat属于冗余操作)- 整个循环的输出重定向到
output.txt,和你的需求一致
可选优化(提升可读性)
如果希望不同文件的内容分隔更清晰,可以给文件名加标记并添加空行:
for f in *; do if [ -f "$f" ]; then echo "--- 文件: $f ---" head -n 10 "$f" echo "" # 空行分隔不同文件 fi done > output.txt
内容的提问来源于stack exchange,提问作者Eman
相关产品推荐
相关产品推荐

