在linux中,记录文件备份并清空文件,而不是删除
我有一个日志文件需要备份 然后清空文件,而不是删除它 删除该文件将导致触发其他脚本 因此,我应该只清空它在linux中,记录文件备份并清空文件,而不是删除,linux,file,backup,logfile,Linux,File,Backup,Logfile,我有一个日志文件需要备份 然后清空文件,而不是删除它 删除该文件将导致触发其他脚本 因此,我应该只清空它 请给我一个建议?要清空文件,您可以使用truncate-s0 filename要清空文件,您可以使用truncate-s0 filename读取文件后,只需使用>filename覆盖文件即可。它还相当于cat/dev/null>filename 类似的解决方案引用了从文件中读取后,您可以使用文件名>覆盖文件这将不使用任何内容覆盖文件。它还相当于cat/dev/null>filename 类似
请给我一个建议?要清空文件,您可以使用
truncate-s0 filename
要清空文件,您可以使用truncate-s0 filename
读取文件后,只需使用>filename
覆盖文件即可。它还相当于cat/dev/null>filename
类似的解决方案引用了从文件中读取后,您可以使用文件名>覆盖文件这将不使用任何内容覆盖文件。它还相当于
cat/dev/null>filename
类似的解决方案引用了AFAIK没有简单的方法可以备份文件并同时清空它。我遇到了一个类似的问题,我最终做的是逐行读取原始文件,并将它们复制到一个新文件中,同时记录行号。然后,我只需从原始文件中删除该数量的行。我使用它手动旋转一些日志文件,对于这些文件,标准旋转方法不是一个选项
ORIGINAL_FILE="file.log"
NEW_FILE="$(date +%s).file.log"
unset n
while read line; do echo "$line" >> $NEW_FILE; : $((n++)); done < $ORIGINAL_FILE
if [[ -v n ]]; then
sed -i "1,$n d" $ORIGINAL_FILE
fi
ORIGINAL\u FILE=“FILE.log”
NEW_FILE=“$(日期+%s).FILE.log”
取消
读行时;是否回显“$line”>>$NEW_文件;:$(n++);完成<$ORIGINAL_文件
如果[-vn]];然后
sed-i“1,$n d”$原始文件
fi
AFAIK备份文件并同时清空文件是不容易的。我遇到了一个类似的问题,我最终做的是逐行读取原始文件,并将它们复制到一个新文件中,同时记录行号。然后,我只需从原始文件中删除该数量的行。我使用它手动旋转一些日志文件,对于这些文件,标准旋转方法不是一个选项
ORIGINAL_FILE="file.log"
NEW_FILE="$(date +%s).file.log"
unset n
while read line; do echo "$line" >> $NEW_FILE; : $((n++)); done < $ORIGINAL_FILE
if [[ -v n ]]; then
sed -i "1,$n d" $ORIGINAL_FILE
fi
ORIGINAL\u FILE=“FILE.log”
NEW_FILE=“$(日期+%s).FILE.log”
取消
读行时;是否回显“$line”>>$NEW_文件;:$(n++);完成<$ORIGINAL_文件
如果[-vn]];然后
sed-i“1,$n d”$原始文件
fi
如果在我的truncate操作期间使用该日志文件,会影响na怎么办?如果该文件在其他地方打开,则不会对其他程序的操作产生不利影响。这是可能的,但我非常怀疑,因为您只是在向文件中写入任何内容,所以只要其他程序不需要某些数据,就应该可以了。我会测试它,如果你有问题回来,更新帖子,我会编辑我的答案。实际上,我正在处理的文件是一个日志文件,我的计划是在文件超过特定大小时清空文件,但在清空之前备份它,如果在我的截断操作中使用了该日志文件,该怎么办,这将影响na?如果文件在其他地方打开,则不会对其他程序的操作产生不利影响。这是可能的,但我非常怀疑,因为您只是在向文件中写入任何内容,所以只要其他程序不需要某些数据,就应该可以了。我会测试它,如果你有问题回来,更新帖子,我会编辑我的答案。实际上,我正在处理的文件是一个日志文件,我的计划是在文件超过特定大小时清空文件,但在清空之前备份它,