如何用命令行合并TXT文件并添加文件的日期时间
合并单行TXT并添加源文件时间戳的命令行方案
嘿,我懂你想要的效果了!把一堆只有一行内容的TXT文件合并成一个,还得给每行加上对应源文件的日期时间,其实把你手里的两个逻辑拼起来就搞定了,我给你几个实用的命令行方案,适配不同的操作系统:
方案1:Bash遍历+stat获取时间(Linux/Git Bash适用)
这个方法直观,逐个处理每个TXT文件,先拿时间再拼内容:
# 先清空目标文件(如果之前有生成过的话) > merged_output.txt # 遍历当前目录下所有txt文件 for file in *.txt; do # 获取文件的修改时间,格式为「YYYY-MM-DD HH:MM:SS」 file_timestamp=$(stat -c "%y" "$file" | cut -d' ' -f1,2) # 把时间戳和文件内容拼接后追加到合并文件 echo "$file_timestamp | $(cat "$file")" >> merged_output.txt done
stat -c "%y":获取文件的修改时间(包含日期、时间和时区)cut -d' ' -f1,2:截取前两部分,去掉时区信息,你也可以根据需求调整格式echo ... >>:把拼接好的内容追加到目标文件,避免覆盖之前的内容
方案2:适配macOS的Bash版本
macOS的stat命令参数和Linux不一样,得换成下面的写法:
> merged_output.txt for file in *.txt; do # macOS下获取格式化后的修改时间 file_timestamp=$(stat -f "%Sm" -t "%Y-%m-%d %H:%M:%S" "$file") echo "$file_timestamp | $(cat "$file")" >> merged_output.txt done
stat -f "%Sm":指定获取修改时间-t "%Y-%m-%d %H:%M:%S":自定义时间格式,你可以改成自己需要的样式(比如只保留日期%Y-%m-%d)
方案3:用Awk一键处理(更简洁)
如果觉得循环写起来麻烦,用Awk可以一步到位,Linux和macOS都能用(注意macOS要调整stat命令):
# Linux/Git Bash版本 awk '{ cmd = "stat -c \"%y\" " FILENAME cmd | getline timestamp close(cmd) split(timestamp, t_arr, " ") print t_arr[1] " " t_arr[2] " | " $0 }' *.txt > merged_output.txt # macOS版本 awk '{ cmd = "stat -f \"%Sm\" -t \"%Y-%m-%d %H:%M:%S\" " FILENAME cmd | getline timestamp close(cmd) print timestamp " | " $0 }' *.txt > merged_output.txt
Awk会自动遍历所有指定的TXT文件,FILENAME变量代表当前处理的文件名,通过执行stat命令拿到时间戳后和当前行内容拼接输出。
你可以根据自己的操作系统选对应的命令,要是想调整时间格式,直接修改stat里的格式参数就行~
内容的提问来源于stack exchange,提问作者Noa Segev




