Jak weryfikujesz zapisane wcześniej archiwum tar?

15

Wiem, że możesz zrobić -W podczas tworzenia archiwum, ale jak zweryfikować i już utworzone archiwum? tvWf mówi, że to nie jest prawidłowe archiwum 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

To samo dzieje się zarówno z wersją tar 1.15 (która jest domyślnym systemem na Centos 5), jak i 1.26 (która jest najnowszą wersją GNU).

cespinoza
źródło

Odpowiedzi:

8

Nie możesz używać Wz 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

Uważam, że tsam wystarczy, aby przetestować archiwum.

EightBitTony
źródło
tsam po prostu wyświetla zawartość archiwum. Chcę sprawdzić, czy pliki w tar mają taką samą zawartość jak oryginały (wciąż w systemie plików), co - jak myślałem - Wpowinno być zrobione (prawda?).
cespinoza
1
W robi to tylko podczas pisania archiwum. Jeśli chcesz się upewnić, że zawartość jest bajtem dla bajtu, musisz go gdzieś wyodrębnić i różnicować / sumować pliki.
EightBitTony
Nie dla mnie tar tvWf t.tar tar: --verify cannot be used with -t:tar (GNU tar) 1.27.1
Tom Hale
14

GNU tarma --compareopcję. Szczegółowe informacje można znaleźć w części Porównanie członków archiwum z systemem plików w dokumentacji.

jon
źródło
5
Np. Pokaże tar -df /path/to/archive.tar.bz2różnice między plikami w archiwum a systemem plików, rozwiązując ścieżki względne w archiwum względem bieżącego katalogu roboczego.
Walf
3

Joerg Schillings starma opcję diff , która jest w stanie porównać pliki w archiwum tar z ich oryginałem. Możesz określić, co należy uznać za różnicę.

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).

Zauważ, że wspomniano, testfileże ma on inny rozmiar i dane. Gdybym nie wykluczył czasów (w tym czasu dostępu!), Podałby również czas dostępu, a także listę wszystkich plików, których czasy zmieniły się, patrząc na nie.

Od upadku BerliOS starmożna znaleźć na sourceforge . Jest bardzo przenośny i kompiluje się bezboleśnie w większości systemów unixoidowych i podobnych do unixoidów.

Tatjana Heuser
źródło
Najnowsze źródła znajdują się w schilytoolspakiecie źródłowym.
schily