설명과 날짜가 포함된 Grep Snapper 스냅샷

설명과 날짜가 포함된 Grep Snapper 스냅샷

저는 스내퍼와 BTRFS와 함께 Arch Linux를 사용하고 있습니다.

저는 Snapper 스냅샷을 통해 시스템을 복원하는 프로세스를 단순화하기 위해 개인용 스크립트를 작성 중입니다. 당연히 라이브 USB로 부팅하고 먼저 최상위 하위 볼륨을 /mnt에 마운트해야 합니다.

Snapper가 생성한 모든 스냅샷을 나열하기 위해 ArchWiki 단계를 따랐지만 날짜와 설명을 표시하고 싶습니다. 날짜가 아닌 설명으로만 식별할 수 있는 특정 스냅샷으로 롤백해야 할 것 같습니다.

Wiki에서는 다음을 실행할 것을 권장합니다.

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(참고: 루트에서 실행해야 함).

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

관련 정보