データがファイルなしで有効なtarファイルであるかどうかを確認する方法という質問を見つけました。、しかし私は疑問に思っていました:既製のコマンドラインソリューションはありますか?
データがファイルなしで有効なtarファイルであるかどうかを確認する方法という質問を見つけました。、しかし私は疑問に思っていました:既製のコマンドラインソリューションはありますか?
回答:
ファイルを解凍するのではなく、tarballのリストを取得して出力を破棄するだけではどうですか?
tar -tzf my_tar.tar.gz >/dev/null
コメントごとに編集。ありがとうzrajm!
コメントに従って編集します。Frozen Flame、ありがとう!このテストは、データの整合性を決して意味しません。これはテープアーカイブユーティリティとして設計されているため、tarのほとんどの実装では、同じファイルの複数のコピーが許可されます。
-z
オプションも不要です。抽出モードまたはリストモードでは何も行いません。
-z
それは間違いなくGNU tarの場合です-これが他の場所(BSDなど)でこれに当てはまるかどうか知っていますか?
tar.gz
か?サポート情報はありますか?
おそらく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(成功)の値。tarまたはgzipのいずれかに問題がある場合、$?ゼロ以外の値になります。
bzip2 -t file.bz2
bz2ファイルのために。
tar -t > /dev/null
(注:t
vs -t
)はずではありませんか?
ディスクに抽出せずに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*
> /dev/null
も実際の例に使うべきです。
pigz
(並列gzip)を使用して* .tag.gzファイルの内容を確認し、アーカイブチェックを高速化することもできます。
pigz -cvdp number_of_threads /[...]path[...]/archive_name.tar.gz | tar -tv > /dev/null
良いオプションは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.
> -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 $?
タールはエラーがなかったと言った:
0
しかし、ファイルは破損しており、「ピート」ではなく「フール」になっています。
-v
出力をパイプするだけの場合はなぜ使用するの/dev/null
ですか?