如何定期删除文件中的所有内容而不删除它


3

我需要定期清空文本文件而不删除它(我知道它有多少行)。

我尝试了这个:

创建一个执行以下脚本的cron

other lines from the script here

sed '1,14d' file.txt>file.txt

如果我从终端运行它,则可以正常工作,但是当我运行cron时,它将执行第一部分(“脚本的其他行”部分),但不会清空文件。

注意:该文件具有777权限,因此我认为它与权限无关。


1
我很惊讶您这么说sed 1,14d file > file执行sed命令之前,shell将看到重定向并截断文件。
格伦·杰克曼

Answers:


4

也许当前工作目录不是cron执行脚本时所期望的目录。尝试指定file.txt的完整路径。同样,这也应该清空文件,以防sed命令出现问题:

echo > file.txt

指定完整路径,并用echo替换sed,现在工作正常。谢谢
zozo 2011年

很酷,很高兴这是一个简单的修复。
db2

5
只是以为我要提到的是,即使这可以解决您的问题,它也不会清空文件,而是在文件中保留换行符。
豆子

10

您可以尝试一个简单的> file.txt

$ cat file.txt
this is a test
$ >file.txt
$cat file.txt
$

2
这是最相关的,因为它清空了文件。
Fish Monitor

4

您还可以使用logrotate,它使您不仅可以清空文件,还可以归档(例如,压缩)文件的先前内容,甚至将文件邮寄给您。


2

传统的un * x方法“清空”文件:

$ cat /dev/null > myfile

移动文件并触摸新文件(因此,更改文件描述符)可能会阻止现有应用继续写入文件,因此通常不希望这样做。如果需要现有文件,则可以执行类似的操作(尽管请注意,它不是原子的,所以两个文件中的某些日期可能会重复):

$ cp myfile myfile-$(date '+%F') && cat /dev/null > myfile

而且,如上所述,“ cron”作业通常不在您期望的目录中运行;但是您可以在脚本中“ cd”到所需的目录来完成工作,并且仍然使用相对路径。


1

我会这样做: mv file file.bak && touch file && rm file.bak

我首先移动文件,以防系统碰巧将其打开。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.