Bash技术问询:如何将目录中多文件合并为含文件名的单文件
用Bash合并文件并在内容前添加文件名的方法
嗨,我来帮你搞定这个需求!要把目录下的多个文件合并成一个名为master的文件,并且每个文件的内容前先显示对应的文件名,这里有几个实用的Bash方案:
方法一:用for循环(最直观易读)
这是最容易理解的写法,适合新手快速上手:
for file in *; do # 跳过目标文件master,并且只处理普通文件(排除子目录) if [ "$file" != "master" ] && [ -f "$file" ]; then echo "$file" # 先输出文件名 cat "$file" # 再输出文件内容 fi done > master
命令说明:
for file in *:遍历当前目录下的所有条目(文件和目录)[ "$file" != "master" ]:避免把刚生成的master文件也加入合并[ -f "$file" ]:确保只处理普通文件,跳过子目录> master:把所有输出结果重定向到master文件中
方法二:用awk(更简洁高效)
如果你想写得更简洁,awk是个好选择,它专门处理文本场景:
awk 'BEGINFILE { # 同样跳过master文件,只处理普通文件 if (FILENAME != "master" && -f FILENAME) print FILENAME } 1' * > master
命令说明:
BEGINFILE:awk的特殊处理块,会在开始处理每个文件前执行,这里用来打印当前文件名FILENAME1:awk的简写语法,代表“为真”,会默认执行print $0,也就是打印当前行内容- 整个命令会自动遍历所有匹配的文件,完成文件名+内容的输出合并
验证效果
假设你有三个文件:
File 1内容为storeFile 2内容为bankFile 3内容为car
执行上述任意命令后,查看master文件的内容:
cat master
会得到:
File 1 store File 2 bank File 3 car
内容的提问来源于stack exchange,提问作者Keith
相关产品推荐
相关产品推荐

