如何在不创建额外文件的情况下将文件内容追加到自身末尾?
无需临时文件实现将file.txt内容追加到自身末尾的方案
下面提供几种可行的方法,避免创建临时文件:
- 方法1:使用
sponge工具(推荐,简洁安全)sponge是moreutils工具集中的工具,它会先完整读取输入内容,再写入目标文件,从根本上避免同时读写同一文件的冲突:
cat file.txt | sponge -a file.txt
-a参数指定以追加模式写入,工具会先读取file.txt的全部内容,再追加到原文件末尾。
- 方法2:利用Bash进程替换
如果系统没有安装sponge,可以通过进程替换先读取文件内容,再追加:
cat <(cat file.txt) >> file.txt
原理是通过<(...)创建一个临时的文件描述符,先把file.txt的内容读取到这个描述符中,再通过cat输出并追加到原文件。
- 方法3:借助变量暂存内容(适合小文件)
把文件内容先保存到变量中,再追加到原文件:
content=$(cat file.txt) echo "$content" >> file.txt
注意必须用双引号包裹变量"$content",否则文件中的换行、空格等格式会丢失。
- 方法4:使用
tee命令(需注意兼容性)
cat file.txt | tee -a file.txt > /dev/null
tee -a会将输入内容同时追加到目标文件和标准输出,这里把标准输出重定向到/dev/null丢弃。不过部分shell环境下,同时读写同一文件可能导致内容异常,因此仅作为备选方案。
内容的提问来源于stack exchange,提问作者Lib
相关产品推荐
相关产品推荐

