Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在linux中,记录文件备份并清空文件,而不是删除_Linux_File_Backup_Logfile - Fatal编程技术网

在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?如果文件在其他地方打开,则不会对其他程序的操作产生不利影响。这是可能的,但我非常怀疑,因为您只是在向文件中写入任何内容,所以只要其他程序不需要某些数据,就应该可以了。我会测试它,如果你有问题回来,更新帖子,我会编辑我的答案。实际上,我正在处理的文件是一个日志文件,我的计划是在文件超过特定大小时清空文件,但在清空之前备份它,