如何将GitHub分支中多个文本文件合并为单个汇总TXT文件
多文本文件批量合并解决方案
问题根因
你使用的git merge-file是Git专属的三向合并工具,仅支持传入3个文件参数(基准版本、当前版本、待合并版本),不支持批量合并多个独立文本文件的需求。传入通配符./txt/*.txt时,程序只会识别首尾两个有效文件参数,因此最终只能保留单个文件的内容。
可行解决方案
适配你GitHub定时任务的场景,直接使用Shell原生命令即可完成合并,无需额外依赖:
方案1:全量覆盖合并(推荐,适合每日全量更新抓取文件的场景)
每次合并时清空原有汇总文件,将./txt目录下所有txt文件的内容全量写入./all.txt,避免历史冗余内容:
# 直接合并所有txt内容到all.txt,无额外分隔 cat ./txt/*.txt > ./all.txt
排序规则调整:
- 如需按文件修改时间从新到旧排序合并,可使用命令:
cat $(ls -t ./txt/*.txt) > ./all.txt - 如需按文件修改时间从旧到新排序合并,可使用命令:
cat $(ls -tr ./txt/*.txt) > ./all.txt
如果需要区分不同文件的内容,可加入分隔标记:
# 先清空原有文件 > ./all.txt # 遍历所有txt文件依次追加,自动添加文件标识分隔线 for txt_file in ./txt/*.txt; do # 跳过目录,只处理文件 [ -f "$txt_file" ] || continue # 写入文件内容 cat "$txt_file" >> ./all.txt # 写入分隔线,标注当前文件名称 echo -e "\n\n=== 以下为文件【${txt_file}】的内容 ===" >> ./all.txt done
方案2:增量追加合并
如果需要保留./all.txt的历史汇总内容,仅追加本次更新的txt文件内容,将上述命令中的输出符号从>改为>>即可:
cat ./txt/*.txt >> ./all.txt
可选优化:内容去重
如果抓取的txt文件存在大量重复内容,可在合并后新增去重步骤:
sort ./all.txt | uniq > ./all.tmp && mv ./all.tmp ./all.txt
GitHub Actions适配说明
上述所有命令均为Ubuntu系统原生支持的Shell指令,无需额外安装软件,直接写入你定时任务的run配置项即可正常执行。
如果抓取的txt存在非UTF-8编码的乱码问题,可在遍历写入时新增编码转换逻辑,示例:
# 自动将GBK编码文件转为UTF-8写入 iconv -f GBK -t UTF-8 "$txt_file" >> ./all.txt
内容的提问来源于stack exchange,提问作者Bitsbb01
相关产品推荐
相关产品推荐

