Дублировать имя резервной копии Timeshift

Вот что нужно, чтобы делать с awk то, что вы хотите. Учитывая этот ввод:

$ printf '%s\n' 'abc\\ndef\nghi'
abc\\ndef\nghi

Обратите внимание, что первый \nсам экранирован и поэтому должен рассматриваться буквально как \\n. Вот как получить ожидаемый результат:

$ printf '%s\n' 'abc\\ndef\nghi' |
    awk '{gsub(/@/,"@A"); gsub(/\\\\/,"@B"); gsub(/\\n/,"\n"); gsub(/@B/,"\\\\"); gsub(/@A/,"@")}1'
abc\\ndef
ghi

Если вы хотите интерпретировать и другие управляющие последовательности, например. \t, вы должны добавить отдельный gsub ()для каждого из них сразу после одного для \n, например.:

awk '{
    gsub(/@/,"@A"); gsub(/\\\\/,"@B")
    gsub(/\\n/,"\n")
    gsub(/\\t/,"\t")
    gsub(/@B/,"\\\\"); gsub(/@A/,"@")
}1'

Эти первые 2 и последние 2 gsub ()создают уникальную строку @B, сопоставляют \\пары с ней, чтобы убрать их с пути, а затем сопоставляют их обратно после выполнения предполагаемых преобразований.

0
03.11.2021, 10:20
1 ответ

Вариант 1, "быстрый взлом":Переменная sys-distroв файлах info.jsonв директориях снимков содержит имя системы, так что вы можете написать скрипт, чтобы изменять его каждый раз при создании снимка. (В большинстве систем каталоги моментальных снимков относятся к типу/run/timeshift/backup/timeshift-btrfs/snapshots/DIFFERENTTIMES/)

Вариант 2 (непроверенный ), самое чистое и простое решение:Изменить /etc/lsb_releaseи/или /etc/os_release. См. также вариант 3 для получения информации об этом.

Вариант 3 (непроверенный ), исправьте его для всего мира с помощью кода:Я немного покопался в исходном коде timeshift .(Под словом «быстро» я имею в виду некоторые обоснованные догадки...)и вот что я нашел:

  • sys-distroгенерируется в write_control_file()и основывается на переданном аргументеdistro_full_name
  • current_distro.full_name()обычно выдается заdistro_full_name
  • full_name()генерируется на основе переменных с именами dist_id, releaseи codename
  • .
  • Все эти переменные генерируютсяget_dist_info()
  • get_dist_info()получает всю эту информацию от /etc/lsb-releaseи/или /etc/os-release(, поэтому предлагается вариант 2)
  • write_control_file()определяется src/Core/Main.vala. Вероятно, лучше всего изменить только этот последний шаг.

Примечание :Все параметры предназначены для будущих резервных копий, чтобы сделать это для уже созданных резервных копий, используйте вариант 1 и измените info.jsonфайлы, которые уже существуют

1
03.11.2021, 14:00

Теги

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