Как вы проверяете архив tar, который уже написан?

15

Я знаю, что вы можете сделать -W при создании архива, но как вы проверяете и уже созданный архив? tvWf говорит, что это неверный архив tar?

$ mkdir tmp
$ echo asdkfjh > tmp/a
$ echo qweroiu > tmp/b
$ ls
tmp
$ tar cvf archive.tar tmp
tmp/
tmp/a
tmp/b
$ tar tvWf archive.tar
tar: This does not look like a tar archive
tar: Skipping to next header
tar: VERIFY FAILURE: 1 invalid header detected
tar: Error exit delayed from previous errors

То же самое происходит и с tar 1.15 (который является системным значением по умолчанию для centos 5) и с 1.26 (который является самой новой версией от gnu).

cespinoza
источник

Ответы:

8

Вы не можете использовать Wс t.

mkdir tmp
echo bdb > tmp/a
echo bdb > tmp/b

tar cvf archive.tar tmp
tmp/
tmp/a
tmp/b

ls -l archive.tar
-rw-r--r-- 1 tony tony 10240 Jun 23 05:57 archive.tar

tar tvf archive.tar
drwxr-sr-x tony/tony         0 2011-06-23 05:57 tmp/
-rw-r--r-- tony/tony         4 2011-06-23 05:57 tmp/a
-rw-r--r-- tony/tony         4 2011-06-23 05:57 tmp/b

tar tvWf archive.tar
tar: This does not look like a tar archive
tar: Skipping to next header
tar: Exiting with failure status due to previous errors

Я считаю, что tодного достаточно, чтобы проверить архив.

EightBitTony
источник
tв одиночку просто перечисляет содержимое архива. Я хочу убедиться, что файлы в tar имеют то же содержимое, что и оригиналы (все еще в файловой системе), что, как я думал, Wдолжно быть (верно?).
Cespinoza
1
W делает это только при записи в архив. Если вы хотите убедиться, что содержимое соответствует байту за байтом, вам нужно будет извлечь его куда-нибудь и вывести / суммировать файлы.
EightBitTony
Не для меня tar tvWf t.tar tar: --verify cannot be used with -t:tar (GNU tar) 1.27.1
Том Хейл
14

У GNU tarесть --compareопция. Подробности смотрите в разделе « Сравнение элементов архива с файловой системой » в документации.

джон
источник
5
Например, tar -df /path/to/archive.tar.bz2будут отображаться различия между файлами в архиве и файловой системе, сопоставляя относительные пути в архиве с текущим рабочим каталогом.
Walf
3

Йорг Шиллингс starимеет опцию diff , которая позволяет сравнивать файлы в архиве tar с их оригиналом. Вы можете указать, что следует понимать как разницу.

0 1 newt pts/1 ~ 17> :> tmp/testfile
0 1 newt pts/1 ~ 19> star -cz tmp > tmp.tar
0 1 newt pts/1 ~ 19> echo bla > tmp/testfile
0 1 newt pts/1 ~ 20> star -z -diff diffopts=not,times < tmp.tar
diffopts=perm,symperm,type,nlink,uid,gid,uname,gname,size,data,rdev,hardlink,symlink,sympath,sparse,dir,acl,xattr,fflags
tmp/testfile: different size,data
star: 115 blocks + 0 bytes (total of 1177600 bytes = 1150.00k).

Обратите внимание, что он упоминается testfileкак разного размера и данных. Если бы я не исключил время (включая время доступа!), Оно также указало бы время доступа, а также перечислило бы все файлы, время которых изменилось, просто посмотрев их.

С момента гибели BerliOS, starможно найти на SourceForge . Он очень компактен и безболезненно компилируется в большинстве unixoid-систем и unixoid-аналогах.

Татьяна Хойзер
источник
Последние источники находятся в schilytoolsпакете исходного кода.
Щили