Как выполнить восстановление из резервной копии моментального снимка btrfs

Использование/bin/sh:

for name in *.avi; do
    n=${name%.avi}    # name without filename extension
    first=${n%% - *}  # first part of name
    last=${n#* - }    # last part of name
    new="$last - $first.avi"  # recombined new name

    printf 'Would move "%s" to "%s"\n' "$name" "$new"
    # mv -- "$name" "$new"
done

${parameter%%word}удаляет самую длинную строку суффикса, соответствующую word, из $parameter, а ${parameter#word}удаляет самую короткую строку префикса, соответствующую word, из $parameter. Таким образом, код поменяет местами две вложенные строки -при первом появлении-(пробела -тире -пробела ).

Удалите рекомендованный mv, чтобы фактически переименовать файлы.


В комментариях к ответу ilkkachu я вижу, что вы также хотите поменять местами первую часть имени, чтобы AB12-1998стало 1998-AB12.

Так как теперь мы выполняем две операции обмена с именем, мы можем поместить это в функцию:

swap () {
    # swaps the two part of a string around
    # the swap point is defined by the first argument

    swstr=$1
    string=$2

    first=${string%%$swstr*}
    last=${string#*$swstr}

    printf '%s%s%s\n' "$last" "$swstr" "$first"
}

for name in *.avi; do
    n=${name%.avi}
    n=$( swap ' - ' "$n" )
    first=${n%% - *}
    first=$( swap '-' "$first" )
    new="$first - ${n#* - }.avi"

    printf 'Would move "%s" to "%s"\n' "$name" "$new"
    # mv -- "$name" "$new"
done

Пример вывода:

Would move "This is a test - AB9-1995.avi" to "1995-AB9 - This is a test.avi"
Would move "This is a test - AB9-1996.avi" to "1996-AB9 - This is a test.avi"
Would move "This is a test - AB9-1997.avi" to "1997-AB9 - This is a test.avi"
Would move "This is a test - AB9-1998.avi" to "1998-AB9 - This is a test.avi"
Would move "This is a test - AB9-1999.avi" to "1999-AB9 - This is a test.avi"

2
23.12.2020, 21:31
1 ответ

Возможно, вы захотите загрузиться с live CD. Оттуда вы можете манипулировать вашими подтомами btrfs, чтобы заменить @root _debian вашим целевым снимком:

# mount <yourDefaultBtrfsSubVolume> /mnt
# btrfs subvol snapshot /mnt/@root_debian/.snapshots/58/snapshot /mnt/@root_debian

См.https://www.linuxsecrets.com/archlinux-wiki/wiki.archlinux.org/index.php/Snapper.html#Restoring_.2F_to_a_previous_snapshot_of_.40

Кроме того, если вы выбрали:

$ sudo snapper rollback 83

, как вы указали в своем комментарии, вам может просто потребоваться обновить установку grub, как это предполагает:https://wiki.archlinux.org/index.php/User:I2Oc9/Root_on_Btrfs_with_LUKS_full_disk_encryption#Rollback_root_filesystem

0
18.03.2021, 22:41

Теги

Похожие вопросы