在linux

时间:2016-04-07 06:37:10

标签: linux bash shell awk archive

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

cat 00000008.XLOG | grep string1 | awk'{print $ 7}'|切-d'>' -f2 | cut -d'<' -f1 | grep string2 | grep .log

然后我可以删除那些所说的文件。

我需要帮助的是如何动态搜索正确的备份日志文件(刚刚发生的备份)以便能够获取文件并将其删除。任何建议表示赞赏。我想在某种程度上在脚本的开头获取时间戳,然后从比所述时间戳更新的任何.xlog文件中获取信息,因为应该只有一个,因为脚本生成时间戳,启动备份,然后抓取文件并删除它们。我只是不知道它的语法。

任何帮助或进一步的建议都将不胜感激。

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

  

-rw-rw-rw- 1 root root 2154 Feb 29 23:46 00000001.CAT

     

-rw-rw-rw- 1 root root 10153 Feb 29 23:46 00000001.XLOG

     

-rw-rw-rw- 1 root root 1308 Mar 6 03:22 00000002.CAT

     

-rw-rw-rw- 1 root root 5257 Mar 6 03:22 00000002.XLOG

     

-rw-rw-rw- 1 root root 1276 Mar 6 03:23 00000003.CAT

     

-rw-rw-rw- 1 root root 4565 Mar 6 03:23 00000003.XLOG

     

-rw-rw-rw- 1 root root 1280 Mar 6 03:26 00000004.CAT

     

-rw-rw-rw- 1 root root 4662 Mar 6 03:26 00000004.XLOG

     

-rw-rw-rw- 1 root root 1278 Mar 6 03:27 00000005.CAT

     

-rw-rw-rw- 1 root root 4748 Mar 6 03:27 00000005.XLOG

     

-rw-rw-rw- 1 root root 1278 Mar 6 03:29 00000006.CAT

     

-rw-rw-rw- 1 root root 4838 Mar 6 03:29 00000006.XLOG

     

-rw-rw-rw- 1 root root 1280 Mar 6 03:30 00000007.CAT

     

-rw-rw-rw- 1 root root 5881 Mar 6 03:30 00000007.DTA

     

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

     

-rw-rw-rw- 1 root root 4929 Mar 6 03:30 00000007.XLOG

     

-rw-rw-rw- 1 root root 14019 Mar 31 04:43 00000008.CAT

     

-rw-rw-rw- 1 root root 220750 Mar 31 04:43 00000008.DTA

     

-rw-rw-rw- 1 root root 12160 Mar 31 04:43 00000008.DTX

     

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

     

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

     

-rw-rw-rw- 1 root root 768 Mar 31 21:22 RestoreStatus.xml

     

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

     

-rw-rw-rw- 1 root root 1533 Mar 31 21:22 SYNCH.DAT

     

-rw-rw-rw- 1 root root 1533 Mar 31 21:22 SYNCH.MIR

输出我的命令:

  

/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>

1 个答案:

答案 0 :(得分:0)

  

成功备份后创建日志文件为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\0"  | awk 'BEGIN {RS="\000";} {if (!newesttimestamp || ($1 > newesttimestamp)) {newesttimestamp=$1;newestline=$0;}} END{if (newestline) {print substr(newestline,23);}}'

使用单行命令:

grep string1 $(find . -type f -printf "%T@ %p\0"  | awk 'BEGIN {RS="\000";} {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\0"  | awk 'BEGIN {RS="\000";} {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 "%s\n" "${line}"; done

如果一切正常,请使用 rm 替换上一个 块中的 printf

$ grep string1 $(find . -type f -printf "%T@ %p\0"  | awk 'BEGIN {RS="\000";} {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