確認方法の場合、Unix.tar.gz ファイルが有効なファイルなuncompressing?

StackOverflow https://stackoverflow.com/questions/2001709

  •  18-09-2019
  •  | 
  •  

質問

このように誰にでも質問 するあらゆる側面を含んでいます場合はデータが有効になtarのファイルなしでファイルとは何ですか?, ものかと思って:ある既製コマンドラインで解決するのか

役に立ちましたか?

解決

どのようなだけのtarballのリストを取得し、出力を捨てるのではなく、ファイルの解凍についてはどうですか?

tar -tzf my_tar.tar.gz >/dev/null

をコメントごとに編集されました。おかげzrajm!

コメントごととして

編集。おかげで冷凍炎!のでは決してない。このテストでは、データの整合性を示唆しています。それは、テープアーカイブユーティリティとして設計されたためタールのほとんどの実装は、同じファイルの複数のコピーが可能になります!

他のヒント

ではありませんのgzip-tオプションのファイルの整合性

http://linux.about.com/od/commands/l/blcmdl1_gzip.htm

http://unix.ittoolbox.com/groups/technical-functional/shellscript-l/how-to-test-file-integrity-of-targz-1138880

試験は、gzipファイルな腐敗した:

gunzip -t file.tar.gz

試験のtarファイルの内部が腐敗した:

gunzip -c file.tar.gz | tar t > /dev/null

の一環として、バックアップするとともに後者のコマンド チェックの値を$?その後、0(成功)値を持つかもしれません。れた場合、タール または、gzipでは、$?て非零としております。

あなたがディスクに抽出することなくtarファイルの実際のテストの抽出を行いたい場合には、-Oオプションを使用します。これは、代わりにファイルシステムの標準出力へのエキスを吐き出します。 tarファイルが破損している場合、プロセスはエラーで中断します。

失敗したタールボールテストの例...

$ 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.*

実施例...

$ 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*

また、アーカイブのチェックを高速化するためにpigz(パラレルGZIP)を使用して* .tag.gzファイルの内容を確認することができます:

pigz -cvdp number_of_threads /[...]path[...]/archive_name.tar.gz | tar -tv > /dev/null

私は、次のコマンドを試してみましたし、彼らはうまく動作します。

bzip2 -t file.bz2
gunzip -t file.gz

しかし、我々はこれらの2つのコマンドを見つけたことができ、時間がかかります。多分私達は、圧縮ファイルのそのままを決定するために、いくつかのより迅速な方法が必要です。

素敵なオプションは、ファイルの種類を報告する行を追加しますtar -tvvf <filePath>を使用することです。

有効な.tarファイル内の

例:

> 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

破損.tarファイルます:

> tar -tvvf corrupted.tar 
tar: Unrecognized archive format
Archive Format: (null),  Compression: none
tar: Error exit delayed from previous errors.

これらはすべて非常にサブ最適なソリューションです。 GZIPスペックの

  

ID2(識別2)
  これらは、ID2 = 139、(037 \、0x1Fの)ID1 = 31固定値を有します   (213 \ 0x8b)、gzip形式であるとしてファイルを識別するための

は、あなたが使っているものは何でも言語にコード化する必要があります。

  

> -Oオプションを使用します。 tarファイルが破損している場合は、[...]、プロセスはエラーで中断します。

たまにはい、時にはません。のは、破損したファイルの例を見てみましょう。

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

これは示しています:

my_name
Fool  

あなたが実行している場合でも、

echo $?

tarはエラーがないことを言っます:

0

が、ファイルが破損して、それは今の代わりに「ピート」の「バカ」しています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top