如何从命令行保存已打开但未保存的文件?
解决思路:处理打开未保存文件的写入冲突
问题回顾
我习惯把所有笔记都记在一个.txt文件里,想写个bash脚本配合cron任务,每天午夜自动把日期追加到文件末尾。预期格式如下:
Monday 19/09/22 my really long notes Tuesday 20/09/22 my other long notes Thursday 21/09/22
追加日期本身没问题,但碰到文件处于打开且未保存的状态时就写不进去。想请教:怎么从命令行保存一个已打开但未保存的文件?
首先得明确:没有通用命令能直接从命令行保存任意程序打开的未保存文件——未修改的内容只存在于打开文件的程序内存里,系统没有统一接口能读取并强制保存这些内容。下面是几个实际可行的解决办法:
1. 绕开文件锁定完成追加
如果编辑器只是占用文件但没加独占锁(比如多数GUI编辑器的非锁定模式),可以用tee命令替代直接追加,兼容性更好:
# 生成指定格式的日期并追加到目标文件 date '+%A %d/%m/%y' | tee -a your_notes.txt > /dev/null
如果还是失败,说明编辑器加了独占锁,就得针对编辑器做特定处理。
2. 针对常用编辑器的专属命令
若使用Vim/Nvim
Vim支持远程命令控制,只要你的Vim是带服务器模式启动的(GUI版默认开启,终端版可加--servername VIM参数启动),就能触发保存:
# 检查是否有Vim打开了目标文件 if pgrep -f "vim.*your_notes.txt" > /dev/null; then # 发送保存命令给Vim vim --remote-save your_notes.txt fi # 执行追加日期操作 date '+%A %d/%m/%y' >> your_notes.txt
若使用VS Code
VS Code的命令行工具支持远程保存,前提是文件在当前VS Code窗口中打开:
code --save your_notes.txt # 之后执行追加日期操作 date '+%A %d/%m/%y' >> your_notes.txt
3. 从根源避免冲突
最省心的方式是调整笔记记录习惯:
- 每天新建一个以日期命名的笔记文件,cron仅负责创建新文件,彻底避开同一文件的写入冲突;
- 换用支持多进程写入的笔记工具,比如云端笔记APP或Markdown笔记软件,这类工具会自动处理文件锁定与同步问题。
内容的提问来源于stack exchange,提问作者brame
相关产品推荐
相关产品推荐

