在linux中完成备份后,编写删除备份文件的脚本



所以我的备份程序将备份存档文件。然后我想列出它们并将它们从服务器中删除。成功备份后会创建一个日志文件000000#.XLOG.我可以用以下命令从日志中获取文件:

cat 00000008.XLOG|grep字符串1|awk"{print$7}"|剪切-d">"-f2 |剪切-d'<'-f1|grep字符串2|grep.log

然后我可以删除这些文件。

我需要帮助的是如何动态搜索正确的备份日志文件(刚刚发生的备份),以便能够获取文件并将其删除。欢迎提出任何建议。我想在脚本开始时以某种方式获得一个时间戳,然后从比所述时间戳新的任何.xlog文件中获取信息,因为应该只有一个时间标记,因为脚本创建了时间戳,启动了备份,然后获取文件并删除它们。我只是不知道它的语法。

如有任何帮助或进一步建议,我们将不胜感激。

存储日志文件的目录的ls-l:

-rw-rw-rw-1根2154 2月29日23:46 00000001.CAT

-rw-rw-rw-1根10153 2月29日23:46 00000001.XLOG

-rw rw rw-1根1308年3月6日03:22 00000002.CAT

-rw rw rw-1根5257 3月6日03:22 00000002.XLOG

-rw-rw-rw-1根1276年3月6日03:23 00000003.CAT

-rw-rw-rw-1根4565 3月6日03:23 00000003.XLOG

-rw rw rw-1根1280 3月6日03:26 00000004.CAT

-rw-rw-rw-1根4662 3月6日03:26 00000004.XLOG

-rw-rw-rw-1根1278 3月6日03:27 00000005.CAT

-rw-rw-rw-1根4748 3月6日03:27 00000005.XLOG

-rw-rw-rw-1根1278 3月6日03:29 00000006.CAT

-rw-rw-rw-1根4838 3月6日03:29 00000006.XLOG

-rw rw rw-1根1280 3月6日03:3000000007.CAT

-rw-rw-rw-1根5881 3月6日03:3000000007.DTA

-rw-rw-rw-1根1240 Mar 6 03:30 00000007.DTX

-rw-rw-rw-1根4929 3月6日03:3000000007.XLOG

-rw-rw-rw-1根14019 3月31日04:43 00000008.CAT

-rw rw rw-1根220750 3月31日04:43 00000008.DTA

-rw-rw-rw-1根12160 3月31日04:43 00000008.DTX

-rw rw rw-1根97720 3月31日04:43 00000008.XLOG

-rw-rw rw-1 root 768 Mar 31 04:43 BackupStatus.xml

-rw-rw rw-1 root 768 3月31日21:22 RestoreStatus.xml

-rw-rw-rw-1根5360 3月31日21:22 RST20160331-212219.XLOG

-rw-rw-rw-1根1533年3月31日21:22同期

-rw-rw-rw-1根1533年3月31日21:22同期

我的命令输出:

/dir/dir/dir/arch.log

/dir/dir/dir/arch2.log

/dir/dir/dir/arch3.log

等等

这是文件的总体布局:

<M ID="4384" O="VV" C="BKUP" S="I" T="2016-03-08T09:43:52. 0-08:00"></M>
<M ID="4314" C="BKUP" S="I" T="2016-03-08T09:43:52. 0-08:00"><PS><P T="0">7.20.5420 Oct 21 2013 12:01:35</P></PS></M>
<M ID="4127" C="BKUP" S="I" T="2016-03-08T09:43:52. 0-08:00"><PS><P T="1">2016-03-08T09:43:52. 0-08:00</P></PS></M>

成功备份后会创建一个日志文件作为000000#.XLOG

我需要帮助的是如何动态搜索正确的备份日志文件(刚刚发生的备份),以便能够获取文件并将其删除。

总之,我知道创建的最后一个.XLOG文件是与上次成功备份相关联的文件。

列出最后创建的.XLOG文件:

ls -1rt *.XLOG | tail -n 1 

使用单行命令:

grep string1 $(ls -1rt *.XLOG | tail -n 1) | awk '{print $7}' | cut -d '>' -f2 | cut -d '<' -f1 | grep string2 | grep .log

----

如果文件名中有特殊字符,则下面是安全版本:

find . -type f -printf "%T@ %p"  | awk 'BEGIN {RS="00";} {if (!newesttimestamp || ($1 > newesttimestamp)) {newesttimestamp=$1;newestline=$0;}} END{if (newestline) {print substr(newestline,23);}}'

使用单行命令:

grep string1 $(find . -type f -printf "%T@ %p"  | awk 'BEGIN {RS="00";} {if (!newesttimestamp || ($1 > newesttimestamp)) {newesttimestamp=$1;newestline=$0;}} END{if (newestline) {print substr(newestline,23);}}') | awk '{print $7}' | cut -d '>' -f2 | cut -d '<' -f1 | grep string2 | grep .log

----

除了更新的一行代码外,已经提供的命令已经通过示例进行了测试。

以下命令尚未经过测试

用最后一个测试单行命令,同时阻止:

$ grep string1 $(find . -type f -printf "%T@ %p"  | awk 'BEGIN {RS="00";} {if (!newesttimestamp || ($1 > newesttimestamp)) {newesttimestamp=$1;newestline=$0;}} END{if (newestline) {print substr(newestline,23);}}') | awk '{print $7}' | cut -d '>' -f2 | cut -d '<' -f1 | grep string2 | grep .log | while read -r line; do printf "%sn" "${line}"; done

当一切正常时,将最后一个中的printf替换为rm

$ grep string1 $(find . -type f -printf "%T@ %p"  | awk 'BEGIN {RS="00";} {if (!newesttimestamp || ($1 > newesttimestamp)) {newesttimestamp=$1;newestline=$0;}} END{if (newestline) {print substr(newestline,23);}}') | awk '{print $7}' | cut -d '>' -f2 | cut -d '<' -f1 | grep string2 | grep .log | while read -r line; do rm -- "${line}"; done

最新更新