J'ai trouvé la question Comment déterminer si les données sont un fichier tar valide sans fichier? , mais je me demandais: existe-t-il une solution de ligne de commande prête à l'emploi?
J'ai trouvé la question Comment déterminer si les données sont un fichier tar valide sans fichier? , mais je me demandais: existe-t-il une solution de ligne de commande prête à l'emploi?
Réponses:
Qu'en est-il simplement d'obtenir une liste de l'archive tar et de jeter la sortie, plutôt que de décompresser le fichier?
tar -tzf my_tar.tar.gz >/dev/null
Modifié selon le commentaire. Merci zrajm!
Modifier selon le commentaire. Merci Frozen Flame! Ce test n'implique en aucun cas l'intégrité des données. Parce qu'il a été conçu comme un utilitaire d'archivage sur bande, la plupart des implémentations de tar autoriseront plusieurs copies du même fichier!
-z
option est également inutile. Il ne fait rien en mode extraction ou liste.
-z
C'est certainement le cas avec GNU tar - savez-vous si c'est vrai ailleurs (BSD, etc.)?
tar.gz
? Des informations d'assistance?
vous pouvez probablement utiliser l'option gzip -t pour tester l'intégrité des fichiers
http://linux.about.com/od/commands/l/blcmdl1_gzip.htm
Pour tester le fichier gzip n'est pas corrompu:
gunzip -t file.tar.gz
Pour tester le fichier tar à l'intérieur n'est pas corrompu:
gunzip -c file.tar.gz | tar -t > /dev/null
Dans le cadre de la sauvegarde, vous pourriez probablement simplement exécuter la dernière commande et vérifier la valeur de $? ensuite pour une valeur 0 (succès). Si le tar ou le gzip a un problème, $? aura une valeur non nulle.
bzip2 -t file.bz2
pour les fichiers bz2.
tar -t > /dev/null
(note: t
vs -t
)?
Si vous voulez faire un vrai test d'extrait d'un fichier tar sans extraire sur le disque, utilisez l'option -O. Cela crache l'extrait vers la sortie standard au lieu du système de fichiers. Si le fichier tar est corrompu, le processus s'interrompra avec une erreur.
Exemple d'échec du test de la balle de goudron ...
$ 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.*
Exemple de travail ...
$ 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*
> /dev/null
pour l'exemple de travail.
Vous pouvez également vérifier le contenu du fichier * .tag.gz en utilisant pigz
(parallèle gzip) pour accélérer la vérification de l'archive:
pigz -cvdp number_of_threads /[...]path[...]/archive_name.tar.gz | tar -tv > /dev/null
J'ai essayé la commande suivante et elles fonctionnent bien.
bzip2 -t file.bz2
gunzip -t file.gz
Cependant, nous pouvons constater que ces deux commandes prennent du temps. Peut-être avons-nous besoin d'un moyen plus rapide pour déterminer l'intégrité des fichiers compressés.
Une option intéressante est d'utiliser tar -tvvf <filePath>
qui ajoute une ligne qui indique le type de fichier.
Exemple dans un fichier .tar valide:
> 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
Fichier .tar corrompu:
> tar -tvvf corrupted.tar
tar: Unrecognized archive format
Archive Format: (null), Compression: none
tar: Error exit delayed from previous errors.
Ce sont toutes des solutions très sous-optimales. À partir de la spécification GZIP
ID2 (IDentification 2)
Ceux-ci ont les valeurs fixes ID1 = 31 (0x1f, \ 037), ID2 = 139 (0x8b, \ 213), pour identifier le fichier comme étant au format gzip.
Doit être codé dans la langue que vous utilisez.
> utilisez l'option -O. [...] Si le fichier tar est corrompu, le processus s'interrompra avec une erreur.
Parfois oui, mais parfois non. Voyons un exemple de fichier corrompu:
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
Ça montre:
my_name
Fool
Même si vous exécutez
echo $?
tar a dit qu'il n'y avait pas d'erreur:
0
mais le fichier a été corrompu, il a maintenant "Fool" au lieu de "Pete".
-v
si vous ne faites que diriger la sortie/dev/null
?