説明と日付を含むGrap Snapperスナップショット

説明と日付を含むGrap Snapperスナップショット

私はスナッパーとBTRFSでArch Linuxを使用しています。

私はSnapperスナップショットを介してシステムを復元するプロセスを簡素化するために個人用スクリプトを作成しています。当然、ライブUSBで起動し、まず最上位サブボリュームを/ mntにマウントする必要があります。

Snapperが作成したすべてのスナップショットを一覧表示するためにArchWikiの手順に従いましたが、日付と説明を表示したいと思います。日付ではなく説明でのみ識別できる特定のスナップショットにロールバックする必要があるようです。

Wikiでは、以下を実行することをお勧めします。

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

実行中のシステムでsnapper lsを実行するのと同じように、日付と説明を1行に表示する方法はありますか?

出力は次のようにする必要があると思います。

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

関連情報