带有描述和日期的 Grep Snapper 快照

带有描述和日期的 Grep Snapper 快照

我正在使用 Arch Linux,带有 snapper 和 BTRFS。

我正在编写一个供个人使用的脚本,以简化通过快照程序快照恢复系统的过程。显然,应该启动到实时 USB 并首先将顶级子卷安装到 /mnt。

我按照 ArchWiki 步骤列出了 snapper 创建的所有快照,但我想显示日期和描述。我觉得我可能需要回滚到一个特定的快照,我只能通过描述而不是日期来识别该快照。

维基建议运行:

grep -r '<date>' /mnt/@snapshots/*/info.xml

有没有一种方法可以让日期和描述都出现在一行中,就像在正在运行的系统上运行 snapper ls 一样。

我想输出应该类似于下面的内容

/mnt/@snapshots/21/info.xml:  <date>2021-07-20 22:00:00</date <description>pacman -Syu</description>
/mnt/@snapshots/24/info.xml:  <date>2021-07-22 22:00:00</date> <description>pacman -S tree</description>
/mnt/@snapshots/25/info.xml:  <date>2021-07-23 22:00:00</date> <description>binutils boost-libs breezy clucene cmake copyq exiv2 gedit gnome-desktop</description>
/mnt/@snapshots/26/info.xml:  <date>2021-07-24 22:00:00</date> <description>google-chrome</description>

答案1

由于您正在处理 xml 文件,因此应该使用 xml 解析器,例如xmlstarlet。考虑这个 xml 文件:

$ sudo cat /.snapshots/2831/info.xml
<?xml version="1.0"?>
<snapshot>
  <type>pre</type>
  <num>2831</num>
  <date>2023-02-28 17:07:56</date>
  <description>pacman -S -u --config /etc/pacman.conf -- endeavouros/eos-translations e</description>
  <cleanup>number</cleanup>
</snapshot>

此示例将从快照中提取描述:

$ sudo xmlstarlet select --template --value-of /snapshot/description /.snapshots/2831/info.xml
pacman -S -u --config /etc/pacman.conf -- endeavouros/eos-translations e

更改--value-of条目以获取其他值。例如,要获取日期,请使用--value-of /snapshot/date.现在您可以为结果分配变量并根据需要显示它们。

现在,由于xmlstarlet在标准 Arch ISO 上不可用,我将展示一个示例grep(注意:这需要在 root 下运行):

#!/usr/bin/env bash

SNAPSHOT_DIR="/.snapshots"
export MYFILES=$(ls "$SNAPSHOT_DIR"/*/info.xml)

for name in $MYFILES
do
    echo $name: $(grep -r '<date>' $name) $(grep -r '<description>' $name)
done

示例输出:

/.snapshots/2836/info.xml: <date>2023-02-28 17:45:05</date> <description>pacman -R -c -s --config /etc/pacman.conf -- linux-lts515 linux-lts515-h</description>
/.snapshots/2837/info.xml: <date>2023-02-28 17:45:06</date> <description>linux-lts515 linux-lts515-headers</description>
/.snapshots/2838/info.xml: <date>2023-02-28 17:51:52</date> <description>pacman -R -c -s --config /etc/pacman.conf -- chaotic-keyring chaotic-mir</description>
/.snapshots/2839/info.xml: <date>2023-02-28 17:51:53</date> <description>chaotic-keyring chaotic-mirrorlist</description>
/.snapshots/2855/info.xml: <date>2023-03-01 08:57:46</date> <description>timeline</description>
/.snapshots/2866/info.xml: <date>2023-03-01 20:08:03</date> <description>pacman -S -u --config /etc/pacman.conf -- endeavouros/eos-translations e</description>
/.snapshots/2867/info.xml: <date>2023-03-01 20:08:08</date> <description>babl dbus-python eos-translations ethtool ffmpeg fuse-common fuse3 gst-l</description>
/.snapshots/2868/info.xml: <date>2023-03-01 20:08:18</date> <description>pacman -U --noconfirm --config /etc/pacman.conf -- /home/ajgringo619/.ca</description>
/.snapshots/2869/info.xml: <date>2023-03-01 20:08:19</date> <description>pandoc-bin</description>
/.snapshots/2879/info.xml: <date>2023-03-02 05:08:38</date> <description>pacman -U --noconfirm --config /etc/pacman.conf -- /home/ajgringo619/.ca</description>
/.snapshots/2880/info.xml: <date>2023-03-02 05:09:39</date> <description>linux-lts-515-git linux-lts-515-git-headers</description>

相关内容