Comment vérifier si un fichier Unix est un fichier valide sans décompressé?
-
18-09-2019 - |
Question
J'ai trouvé la question Comment déterminer si les données fichier tar valide sans fichier , mais je me demandais: est-il une solution de ligne de commande prêt à l'emploi
?La solution
Qu'en est-il juste obtenir une liste des tarball et jeter la sortie, plutôt que le fichier décompresser?
tar -tzf my_tar.tar.gz >/dev/null
Edité selon un commentaire. Merci zrajm!
Modifier comme par commentaire. Merci Frozen Flame! Ce test ne signifie nullement l'intégrité des données. Parce qu'il a été conçu comme un utilitaire d'archivage de bande la plupart des implémentations de goudron permettront plusieurs copies du même fichier!
Autres conseils
vous pouvez probablement utiliser l'option -t gzip pour tester l'intégrité des fichiers
Vous pouvez également vérifier le contenu du fichier * .tag.gz en utilisant pigz
(gzip parallèle) pour speedup le contrôle de l'archive:
pigz -cvdp number_of_threads /[...]path[...]/archive_name.tar.gz | tar -tv > /dev/null
Je l'ai essayé la commande suivante et ils fonctionnent bien.
bzip2 -t file.bz2
gunzip -t file.gz
Cependant, on peut retrouver ces deux commandes sont de temps. Peut-être que nous avons besoin d'un moyen plus rapide pour déterminer intact des fichiers Compresser.
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
Corrupted fichier .tar:
> tar -tvvf corrupted.tar
tar: Unrecognized archive format
Archive Format: (null), Compression: none
tar: Error exit delayed from previous errors.
Ce sont toutes les solutions très sous-optimales. De GZIP spec
ID2 (IDentification 2)
Celles-ci ont des valeurs fixes ID1 = 31 (0x1f, \ 037), ID2 = 139 (0x8b, \ 213), pour identifier le fichier comme étant au format gzip.
A à coder dans la langue que vous utilisez.
> utiliser l'option -o. [...] Si le fichier tar est corrompu, le processus abandonnera avec une erreur.
Parfois, oui, mais parfois pas. Voyons un exemple d'un 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
Il indique:
my_name
Fool
Même si vous exécutez
echo $?
tar dit qu'il n'y avait pas d'erreur:
0
mais le fichier a été endommagé, il est maintenant "Fool" au lieu de "Pete".