我需要定期清空文本文件而不删除它(我知道它有多less行)。
我试过这个:
other lines from the script here sed '1,14d' file.txt>file.txt
如果我从terminal运行它工作正常,但是当我运行cron它执行第一部分(“脚本的其他行”这一部分),但它不会清空该文件。
注意:该文件有777个权限,所以我不认为它是权限相关的。
也许当前的工作目录不是你在cron执行脚本时所期待的。 尝试指定file.txt的完整path。 此外,这应该清空文件,以防万一sed命令有问题:
echo > file.txt
你可以尝试一个简单的> file.txt
$ cat file.txt this is a test $ >file.txt $cat file.txt $
你也可以使用logrotate ,它可以让你select不仅清空文件,还可以压缩文件的前一个内容,甚至将文件邮寄给你。
传统的un * x方法来“清空”一个文件:
$ cat /dev/null > myfile
移动文件和触摸新文件(因此,更改文件描述符)可能会阻止现有的应用程序继续写入文件,因此通常是不可取的。 如果需要现有文件的副本,则可以执行类似操作(尽pipe请注意,这不是primefaces性的,所以某些date可能会在两个文件中重复):
$ cp myfile myfile-$(date '+%F') && cat /dev/null > myfile
而且,如前所述,“cron”作业通常不会在你期望的目录中运行; 但是你可以在脚本中“cd”到你想要的目录来完成这个工作并且仍然使用相对path。
我会这样做: mv file file.bak && touch file && rm file.bak
我首先移动文件,以防系统恰好打开。
如果你的系统有,你甚至可以使用truncate(1)。