Wie zu überprüfen, ob ein Unix tar.gz-Datei eine gültige Datei ist ohne zu Dekomprimieren?
-
18-09-2019 - |
Frage
Ich habe die Frage Wie zu bestimmen, ob Daten gefunden ist gültig tar-Datei ohne Datei , aber ich habe mich gefragt: gibt es eine fertige Kommandozeilen-Lösung
?Lösung
Was ist nur eine Auflistung der Tarball bekommen und die Ausgabe, anstatt Dekomprimieren der Datei wegzuwerfen?
tar -tzf my_tar.tar.gz >/dev/null
Herausgegeben als pro Kommentar. Dank zrajm!
Bearbeiten per Kommentar. Dank Gefrorene Flamme! Dieser Test bedeutet in keiner Weise die Integrität der Daten. Weil es als Bandarchiv Dienstprogramm die meisten Implementierungen von Teer wurde entwickelt werden mehrere Kopien derselben Datei erlauben!
Andere Tipps
Sie könnten wahrscheinlich die gzip -t Option verwenden, um die Dateien Integrität zu testen
Sie können auch Inhalte von * .tag.gz Datei überprüfen pigz
(parallel gzip) unter Verwendung der Archivprüfung Speedup:
pigz -cvdp number_of_threads /[...]path[...]/archive_name.tar.gz | tar -tv > /dev/null
Ich habe den folgenden Befehl ausprobiert und sie funktionieren gut.
bzip2 -t file.bz2
gunzip -t file.gz
Wir können jedoch fanden diese zwei Befehle sind zeitaufwendig. Vielleicht brauchen wir etwas mehr schnellen Weg, die intakten der Kompresse Dateien zu bestimmen.
Eine nette Option ist tar -tvvf <filePath>
zu verwenden, die eine Zeile hinzufügt, der die Art der Datei meldet.
Beispiel in einer gültigen TAR-Datei:
> tar -tvvf filename.tar
drwxr-xr-x 0 diegoreymendez staff 0 Jul 31 12:46 ./testfolder2/
-rw-r--r-- 0 diegoreymendez staff 82 Jul 31 12:46 ./testfolder2/._.DS_Store
-rw-r--r-- 0 diegoreymendez staff 6148 Jul 31 12:46 ./testfolder2/.DS_Store
drwxr-xr-x 0 diegoreymendez staff 0 Jul 31 12:42 ./testfolder2/testfolder/
-rw-r--r-- 0 diegoreymendez staff 82 Jul 31 12:42 ./testfolder2/testfolder/._.DS_Store
-rw-r--r-- 0 diegoreymendez staff 6148 Jul 31 12:42 ./testfolder2/testfolder/.DS_Store
-rw-r--r-- 0 diegoreymendez staff 325377 Jul 5 09:50 ./testfolder2/testfolder/Scala.pages
Archive Format: POSIX ustar format, Compression: none
Beschädigte TAR-Datei:
> tar -tvvf corrupted.tar
tar: Unrecognized archive format
Archive Format: (null), Compression: none
tar: Error exit delayed from previous errors.
Diese sind alle sehr suboptimale Lösungen. Aus dem GZIP spec
ID2 (IDentification 2)
Diese haben die festen Werte ID1 = 31 (0x1F, \ 037), ID2 = 139 (0x8B, \ 213) zu identifizieren, die Datei als in gzip-Format zu sein.
Hat codiert in zu welcher Sprache Sie verwenden.
> die -O-Option. [...] Wenn die TAR-Datei beschädigt ist, wird der Prozess mit einem Fehler abgebrochen.
Manchmal ja, manchmal aber auch nicht. Nehmen wir ein Beispiel aus einer beschädigten Datei finden Sie unter:
echo Pete > my_name
tar -cf my_data.tar my_name
# // Simulate a corruption
sed < my_data.tar 's/Pete/Fool/' > my_data_now.tar
# // "my_data_now.tar" is the corrupted file
tar -xvf my_data_now.tar -O
Es zeigt:
my_name
Fool
Auch wenn Sie ausführen
echo $?
tar sagte, dass es keine Fehler:
0
, aber die Datei beschädigt wurde, wurde nun „Täuschen“ anstelle von „Pete“.