如何在Linux

时间:2018-05-16 18:08:15

标签: linux bash copy logrotate

假设某些日志的轮换大小为50MB。 我做了' grep'一些字符串和我的字符串存在于日志文件log_3中,我希望在将log_3旋转(重命名)到log_4之前复制它的内容。 请建议如何在旋转之前备份log_3的内容。 我只需要log_3的内容。我不想像我复制log_3(通过cp -p log_3 log_3_backup),但到那时日志被轮换,现在log_3_backup包含log_2的内容。我们有什么办法可以避免这种情况。在自动化项目上工作我需要一个解决方案。非常感谢您提出的建议。您可以共享python或shell脚本。

1 个答案:

答案 0 :(得分:1)

您可以获取重命名时不会更改的文件inode编号,然后按该名称引用该文件

for f in *.log; do
    # get inode of file
    iname=$(ls -i $f)
    # test file contents for pattern presence 
    if grep -q 'some pattern' $f; then
        # the file contains the searched pattern, let's do something
        # find by inode number and move it
        find -inum $iname -exec mv {} {}.bak ';'
    fi
done

也许不再需要备份文件了,让我们再试一次

find -inum $iname -print0 | xargs -r0 grep 'some pattern'