저는 스내퍼와 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>