我需要将文件的内容复制到同一文件的末尾。我编写了下面的代码。
#!/bin/bash cat file.txt >> file1.txt cat file1.txt >> file.txt rm file1.txt
但是它创建了一个额外的文件。如何在不创建额外文件的情况下完成这一操作呢?
6ie5vjzr1#
您可以执行以下操作:
input=file1.txt dd bs="$(wc -c < "$input")" count=1 if="$input" >> "$input"
但是....为什么呢?使用辅助文件没有什么错,如果你在创建后不久就删除它,那么它几乎不可能引起任何实际的磁盘操作。只需创建临时文件并删除它。注意,这有一个固有的争用条件,由于文件大小的计算(而wc -c是一种很糟糕的方法!)如果任何其他进程正在修改文件,但这个问题是您问题描述中固有的。
wc -c
0wi1tuuw2#
您可以创建一个变量作为文件的值并将其置于末尾:)
zvokhttg3#
或者用海绵-这正是它的作用。
cat file1.txt file1.txt | sponge file1.txt
3条答案
按热度按时间6ie5vjzr1#
您可以执行以下操作:
但是....为什么呢?使用辅助文件没有什么错,如果你在创建后不久就删除它,那么它几乎不可能引起任何实际的磁盘操作。只需创建临时文件并删除它。注意,这有一个固有的争用条件,由于文件大小的计算(而
wc -c
是一种很糟糕的方法!)如果任何其他进程正在修改文件,但这个问题是您问题描述中固有的。0wi1tuuw2#
您可以创建一个变量作为文件的值并将其置于末尾:)
zvokhttg3#
或者用海绵-这正是它的作用。