Друзья! Вот так я инкрементально дампирую:
https://www.gnu.org/software/tar/manual/html_node/Incremental-Dumps.html#Incremental-Dumps
tar --create --file=archive.2.tar --listed-incremental=/var/log/usr.snar /usr
Как прочесть файл /var/log/usr.snar?- по другому: открыть его в человекочитаемом виде? Если прост открываешь cat там просто последовательность непонятная из цифр- да она и не обязана быть другой. Есть какие-нибудь способы- прежде всего у самого tar? В файле /var/log/usr.snar как минимум список архивируемых файлов и папок должен быть. Debian 11. Спасибо, кто откликнется.
Как прочесть файл-снапшот, который создаётся при инкрементальном дампировании tar?
Модератор: /dev/random
-
- Сообщения: 1024
- ОС: астралинукс
Как прочесть файл-снапшот, который создаётся при инкрементальном дампировании tar?
Я просто читаю маны.
-
- Модератор
- Сообщения: 20975
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Как прочесть файл-снапшот, который создаётся при инкрементальном дампировании tar?
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Спасибо сказали:
-
- Сообщения: 1024
- ОС: астралинукс
Re: Как прочесть файл-снапшот, который создаётся при инкрементальном дампировании tar?
Вот это может помочь.
https://www.gnu.org/software/tar/manual/html_node/Fixing-Snapshot-Files.html#Fixing-Snapshot-Files
Для моих скромных нужд хватило прочтения снапшота:
https://www.gnu.org/software/tar/manual/html_node/Fixing-Snapshot-Files.html#Fixing-Snapshot-Files
Для моих скромных нужд хватило прочтения снапшота:
Shell
$ cat foo.snar | bbe -e "s/\x00\x00\x00/\x0a\x0a/" | bbe -e "s/\x00/./" | bbe -e "i 35 \x0a\x0a"
$
Я просто читаю маны.
-
- Сообщения: 2913
- ОС: Gentoo
Re: Как прочесть файл-снапшот, который создаётся при инкрементальном дампировании tar?
Если для человеков, то вот основанный на этом на пайтон:
Правится чисто регулярками.
Spoiler
Shell
#!/usr/bin/env python
import os, sys, re
if len(sys.argv) < 2:
print("Missing argument")
sys.exit()
file = sys.argv[1]
if not os.path.isfile(file):
print("No such File: " + file)
sys.exit()
fd = open(file, 'rb')
#dump=b""
#while True:
# buf=fd.read()
# dump=dump + buf
# if buf == b"":
# break
dump=fd.read()
dump=re.sub(b'\x00\x00\x00', b'\n\n', dump)
dump=re.sub(b'\x00D', b'\n|____/', dump)
dump=re.sub(b'\x00Y', b'\n|____/', dump)
dump=re.sub(b'\x00', b'.', dump)
#dump=re.sub(b'^(.|\n){36}', re.match(b'^(.|\n){36}', dump)[0] + b'\n\n', dump)
dump=re.sub(b'^(.|\n){36}', b'', dump)
dump=re.sub(b'(\d{0,10})\.(\d{0,10})\.(\d{0,10})\.(\d{0,10})\.(\d{0,10})\.', b'', dump)
sys.stdout.buffer.write(dump)
fd.close()
-
- Сообщения: 2913
- ОС: Gentoo
Re: Как прочесть файл-снапшот, который создаётся при инкрементальном дампировании tar?
Хм, посмотрел как следует что выложил. Скрипт не корректно работает если сжимаемый головной каталог начинается на Y или D.
Это подправленная версия:
Дальше дело фантазии.
Хотя пардон, там есть ещё недоработка с первыми цифрами(они одни и те же). Это не мешало бы построчно разобрать. Но с байтами это не так просто.
Теперь всё соответствует.
Это подправленная версия:
Spoiler
Shell
#!/usr/bin/env python
import os, sys, re
if len(sys.argv) < 2:
print("Missing argument")
sys.exit()
file = sys.argv[1]
if not os.path.isfile(file):
print("No such File: " + file)
sys.exit()
fd = open(file, 'rb')
dump=fd.read()
dump=re.sub(b'^(.|\n){36}', b'', dump)
dump=re.sub(b'\x00\x00\x00', b'\n\n', dump)
md=re.search(b'(\d{0,10})\x00(\d{0,10})\x00(\d{0,10})\x00(\d{0,10})\x00(\d{0,10})\x00', dump)[0]
md=re.sub(b'\x00', b'.', md)
md=re.sub(b'\.$', b': ', md)
dump=re.sub(b'(\d{0,10})\x00(\d{0,10})\x00(\d{0,10})\x00(\d{0,10})\x00(\d{0,10})\x00', md, dump)
dump=re.sub(b'\x00D', b'\n|____/', dump)
dump=re.sub(b'\x00Y', b'\n|____/', dump)
dump=re.sub(b'\x00', b'.', dump)
#dump=re.sub(b'(\d{0,10})\.(\d{0,10})\.(\d{0,10})\.(\d{0,10})\.(\d{0,10}): ', b'', dump)
sys.stdout.buffer.write(dump)
fd.close()
Хотя пардон, там есть ещё недоработка с первыми цифрами(они одни и те же). Это не мешало бы построчно разобрать. Но с байтами это не так просто.
Добавлено (09:50):
И последний вариант, с решённой последней проблемой.Spoiler
Shell
#!/usr/bin/env python
import os, sys, re
if len(sys.argv) < 2:
print("Missing argument")
sys.exit()
file = sys.argv[1]
if not os.path.isfile(file):
print("No such File: " + file)
sys.exit()
fd = open(file, 'rb')
dump=fd.read()
dump=re.sub(b'^(.|\n){36}', b'', dump)
dump=re.sub(b'\x00\x00\x00', b'\n', dump)
list_dump=dump.split(b'\n')
for bytes in list_dump:
if bytes != b"":
md=re.search(b'(\d{0,10})\x00(\d{0,10})\x00(\d{0,10})\x00(\d{0,10})\x00(\d{0,10})\x00', bytes)[0]
md=re.sub(b'\x00', b'.', md)
md=re.sub(b'\.$', b': ', md)
buf=re.sub(b'(\d{0,10})\x00(\d{0,10})\x00(\d{0,10})\x00(\d{0,10})\x00(\d{0,10})\x00', md, bytes)
buf=re.sub(b'\x00D', b'\n|____/', buf)
buf=re.sub(b'\x00Y', b'\n|____/', buf)
# buf=re.sub(b'(\d{0,10})\.(\d{0,10})\.(\d{0,10})\.(\d{0,10})\.(\d{0,10}): ', b'', buf)
sys.stdout.buffer.write(buf + b'\n\n')
fd.close()
Спасибо сказали: