我也發現this link。但是我想知道是否有任何現成的命令行解決方案?如何檢查Unix .tar.gz文件是否是一個沒有解壓縮的有效文件?
回答
如何獲取tarball的列表並丟棄輸出,而不是解壓文件?
tar -tzf my_tar.tar.gz >/dev/null
按照評論編輯。謝謝zrajm!
按照評論編輯。感謝凍火!這個測試決不意味着數據的完整性。因爲它被設計成磁帶存檔實用程序,所以大多數tar實現將允許同一文件的多個副本!
你很可能使用gzip的-t選項測試文件完整性
http://linux.about.com/od/commands/l/blcmdl1_gzip.htm
要測試gzip文件未損壞:
gunzip -t file.tar.gz
測試裏面的tar文件沒有損壞:
gunzip -c file.tar.gz | tar t > /dev/null
作爲備份的一部分,您可能只需運行後一個命令並檢查$?的值。之後爲0(成功)值。如果焦油 或gzip有問題,$?將具有非零值。
'gunzip -t file.gz':此測試可能通過,但它不會測試磁帶歸檔(tar)文件的完整性。 – 2011-10-28 06:53:58
謝謝菲利普,我已將您的寶貴意見納入答案。 – spacediver 2013-02-26 20:52:12
和'bzip2 -t file.bz2'爲bz2文件。 – asmeurer 2014-01-14 22:08:58
如果要在不提取到磁盤的情況下對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*
> use the -O option. [...] If the tar file is corrupt, the process will abort with an error.
有時候是的,但有時不是。讓我們來看看一個已損壞的文件的例子:
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
但文件已損壞,它有n 「愚人」而不是「皮特」。
您還可以檢查* .tag的內容。使用pigz
(並行的gzip)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.
這發生在BSD焦油上,但不在GNU焦油上。 – mcallister 2014-05-20 16:48:48
我曾嘗試下面的命令,他們工作得很好。
bzip2 -t file.bz2
gunzip -t file.gz
但是,我們可以發現這兩個命令是耗時的。也許我們需要一些更快捷的方式來確定壓縮文件的完整性。
這些都是非常不理想的解決方案。從GZIP spec
ID2 (IDentification 2)
These have the fixed values ID1 = 31 (0x1f, \037), ID2 = 139 (0x8b, \213), to identify the file as being in gzip format.
必須編碼成您正在使用的任何語言。
- 1. 解壓縮tar.gz文件
- 2. 檢查用戶是否有壓縮文件夾或文件
- 3. 如何檢查Java源文件是否有效(沒有錯誤)?
- 4. 有沒有辦法檢查(文件)句柄是否有效?
- 5. 的tar.gz壓縮沒有爲GIF文件工作
- 6. 如何檢查給定文件是否是C++中的有效視頻文件?
- 7. 如何檢查文件是否被gzip壓縮?
- 8. gzipstream解壓縮UNIX文件中止沒有錯誤
- 9. 檢查一個Lilypond(.ly)文件是否對python有效
- 10. Android:檢查一個文件是否是一個有效的SQLite數據庫
- 11. 壓縮swf文件是否有可能導致文件變大?
- 12. VB檢查一個文件夾裏面是否有文件
- 13. iOS - 如何檢查wheather pem文件是否有效?
- 14. 如何檢查xml文件是否有效
- 15. 是否有效文件名
- 16. 解壓縮文件的結果「BadZipFile:文件不是zip文件」
- 17. Windows壓縮文件夾沒有完全解壓縮zip
- 18. Android:是否可以檢查該文件是否是一個apk文件,如果沒有擴展提供
- 19. 需要檢查文件是否是有效的APK
- 20. 檢查文件是否是有效的jpg
- 21. 檢查文件是否是有效的圖像
- 22. 如何使用C#檢查文件是否爲有效的XPS文件?
- 23. 檢查多個文件的完整路徑是否有效
- 24. 如何檢查我的文件夾中是否至少有一個文件* .bak?
- 25. 是否有一個壓縮實用程序只會壓縮相同的文件而不創建新文件?
- 26. 如何驗證文件是否爲PowerShell中的壓縮文件
- 27. 如何使用Scala檢查文件是否是Unix套接字?
- 28. 如何解壓/解壓縮文件
- 29. AWS'eb deploy'總是壓縮所有文件
- 30. 檢查md5的壓縮文件,而不完全解壓縮
如果你只是將輸出傳遞給'/ dev/null',爲什麼要使用'-v'? – zrajm 2013-12-29 13:38:39
True @zrajm。猜猜這是我的肌肉記憶踢! ( - : – 2014-01-10 09:55:15
'-z'選項也是不需要的,它在提取或列表模式下不執行任何操作 – asmeurer 2014-01-14 22:07:26