Ich habe die Frage gefunden Wie lässt sich feststellen, ob die Daten in einer tar-Datei gültig sind, ohne dass eine Datei vorhanden ist? aber ich habe mich gefragt: Gibt es eine fertige Kommandozeilenlösung?
Antworten
Zu viele Anzeigen?Wie wäre es, einfach eine Liste des Tarballs zu erhalten und die Ausgabe wegzuwerfen, anstatt die Datei zu dekomprimieren?
tar -tzf my_tar.tar.gz >/dev/null
Bearbeitet nach Kommentar. Danke zrajm!
Bearbeiten nach Kommentar. Danke Frozen Flame! Dieser Test impliziert in keiner Weise die Integrität der Daten. Da es als Bandarchivierungsprogramm entwickelt wurde, erlauben die meisten Implementierungen von tar mehrere Kopien derselben Datei!
Sie können wahrscheinlich die Option gzip -t verwenden, um die Integrität der Dateien zu prüfen
http://linux.about.com/od/commands/l/blcmdl1_gzip.htm
Um zu prüfen, ob die gzip-Datei nicht beschädigt ist:
gunzip -t file.tar.gz
Um zu prüfen, ob die tar-Datei nicht beschädigt ist:
gunzip -c file.tar.gz | tar -t > /dev/null
Als Teil des Backups können Sie wahrscheinlich nur den letztgenannten Befehl ausführen und anschließend den Wert von $? auf 0 (Erfolg) überprüfen. Wenn entweder das tar oder gzip ein Problem hat, wird $? einen Wert ungleich Null haben.
Wenn Sie einen echten Test-Extrakt einer tar-Datei durchführen wollen, ohne auf die Festplatte zu extrahieren, verwenden Sie die Option -O. Damit wird das Extrakt auf die Standardausgabe statt auf das Dateisystem ausgegeben. Wenn die tar-Datei beschädigt ist, bricht der Prozess mit einer Fehlermeldung ab.
Beispiel für einen fehlgeschlagenen Teerballtest...
$ echo "this will not pass the test" > hello.tgz
$ tar -xvzf hello.tgz -O > /dev/null
gzip: stdin: not in gzip format
tar: Child returned status 1
tar: Error exit delayed from previous errors
$ rm hello.*
Arbeitsbeispiel...
$ ls hello*
ls: hello*: No such file or directory
$ echo "hello1" > hello1.txt
$ echo "hello2" > hello2.txt
$ tar -cvzf hello.tgz hello[12].txt
hello1.txt
hello2.txt
$ rm hello[12].txt
$ ls hello*
hello.tgz
$ tar -xvzf hello.tgz -O
hello1.txt
hello1
hello2.txt
hello2
$ ls hello*
hello.tgz
$ tar -xvzf hello.tgz
hello1.txt
hello2.txt
$ ls hello*
hello1.txt hello2.txt hello.tgz
$ rm hello*
Eine gute Möglichkeit ist die Verwendung von tar -tvvf <filePath>
die eine Zeile hinzufügt, in der die Art der Datei angegeben wird.
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.
- See previous answers
- Weitere Antworten anzeigen