Unix .tar.gz ফাইলটি সঙ্কুচিত না করে একটি বৈধ ফাইল কিনা তা কীভাবে পরীক্ষা করবেন?


112

আমি প্রশ্নটি পেয়েছি কীভাবে এটি নির্ধারণ করতে হবে যে কোনও ফাইল ছাড়াই ডেটা বৈধ টার ফাইল? , তবে আমি ভাবছিলাম: একটি প্রস্তুত কমান্ড লাইন সমাধান আছে?

উত্তর:


121

কেবলমাত্র তারবালের একটি তালিকা পাওয়ার সাথে সাথে ফাইলটি সঙ্কুচিত না করে আউটপুট ফেলে দেওয়া হবে?

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

মন্তব্য অনুযায়ী সম্পাদিত। ধন্যবাদ জরাজম!

মন্তব্য অনুযায়ী সম্পাদনা করুন। ধন্যবাদ হিমায়িত শিখা! এই পরীক্ষাটি কোনওভাবেই ডেটার অখণ্ডতা বোঝায় না। কারণ এটি একটি টেপ সংরক্ষণাগার ইউটিলিটি হিসাবে ডিজাইন করা হয়েছিল বেশিরভাগ টারের প্রয়োগগুলি একই ফাইলটির একাধিক অনুলিপিগুলিকে অনুমতি দেবে!


13
-vআপনি যদি কেবলমাত্র আউটপুটটি পাইপ করছেন তবে কেন ব্যবহার করবেন /dev/null?
zrajm

2
সত্য @Zrajm। অনুমান করুন এটি আমার পেশির স্মৃতিতে লাথি মারছে! (-:
রব ওয়েলস

5
-zবিকল্পটি অপ্রয়োজনীয় করা হয়। এটি এক্সট্র্যাক্ট বা তালিকা মোডে কিছুই করে না।
asmeurer

1
@ এসমিউর রে: -zজিএনইউ টারের ক্ষেত্রে অবশ্যই এটি হয়েছে - আপনি কি জানেন যে এটি অন্য কোথাও (বিএসডি ইত্যাদি) সত্য?
belacqua

2
@ ব্লবওয়েলস তবে কী সফলভাবে সঙ্কোচিত করা বা কন্টেন্ট ফাইলের লিস্টিংয়ের মাধ্যমে ডেটা অখণ্ডতা বোঝায় tar.gz? কোন সমর্থন তথ্য?
হিমায়িত শিখা

99

আপনি সম্ভবত ফাইলগুলির অখণ্ডতা পরীক্ষা করতে 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

জিজিপ ফাইলটি পরীক্ষা করা দুর্নীতিগ্রস্থ নয়:

gunzip -t file.tar.gz

ভিতরে থাকা ফাইল ফাইলটি পরীক্ষা করা দুর্নীতিগ্রস্থ নয়:

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

ব্যাকআপের অংশ হিসাবে আপনি সম্ভবত কেবল পরবর্তী কমান্ডটি চালাতে পারেন এবং $ এর মান পরীক্ষা করতে পারেন? পরে একটি 0 (সাফল্য) মান জন্য। যদি টার বা জিপ-এর কোনও সমস্যা থাকে, তবে? একটি শূন্য অ মান হবে।


3
এবং bzip2 -t file.bz2bz2 ফাইলের জন্য।
asmeurer

4
এটি "টার-টিজএফ my_tar.tar.gz> / dev / নাল" কি করতে কেবল দুটি আদেশ ব্যবহার করছে না?
রব ওয়েলস 18

এটি tar -t > /dev/null(নোট: tবনাম -t) হওয়ার কথা নয় ?
ইন্ট্রাস্টেলার এক্সপ্লোরার

1
@ ইন্ট্রাস্টেলার-এক্সপ্লোরার এটি আমার পক্ষে একটি টাইপো, যদিও এটি হাইফেন ছাড়াই এখনও কাজ করা উচিত। আমি সবেমাত্র টারে পুরানো স্টাইলের বিকল্পগুলিতে অভ্যস্ত। unix.stackexchange.com/questions/394060/…
জন

32

আপনি যদি ডিস্কে এক্সট্র্যাক্ট না করেই একটি টার ফাইলের প্রকৃত পরীক্ষার এক্সট্রাক্ট করতে চান তবে -O বিকল্পটি ব্যবহার করুন। এটি এক্সট্র্যাক্টটিকে ফাইল সিস্টেমের পরিবর্তে স্ট্যান্ডার্ড আউটপুটে নিয়ে যায়। যদি টার ফাইলটি দূষিত হয় তবে প্রক্রিয়াটি একটি ত্রুটির সাথে বাতিল হয়ে যাবে।

ব্যর্থ টার বল পরীক্ষার উদাহরণ ...

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

1
আমার কাছে মনে হয় এটি সেরা পরীক্ষা one এটি প্রতিটি ফাইল সত্যই নিষেধ করে এবং নিশ্চিত করে যে কোনও ত্রুটি নেই।
ভেতরে

সত্যিই দরকারী। আমি একটি শেল স্ক্রিপ্ট তৈরি করেছি, ফাইলটির পথটি পাস করার জন্য একটি আর্গুমেন্ট হুক যুক্ত করব এবং এটি আমার পথে রাখব :) [তার
এক্সভিজেফ

@ স্লিভস আপনি কেন মনে করেন যে এটি গৃহীত উত্তরের চেয়ে ভাল? tar -tvzf hello.tgz> / dev / null একই ত্রুটি দেয়।
dash17291

5
@ ড্যাশ 17291 আমি এটি বলছি কারণ আমি আশা করি যে এটি প্রমাণ করার জন্য একটি কঠিন সমস্যা হবে যে সমস্ত ক্ষেত্রে, -tvf সমস্ত ত্রুটি বা দুর্নীতিতে ধরা পড়বে যা -xvf। অন্য কথায়, -xvf সমস্ত -tvf ধরে ফেলবে, তবে আমি কনভার্সটি সত্য বলে বলতে পারি না।
হাতা 2

সম্ভবত আপনার > /dev/nullকাজের উদাহরণের জন্যও ব্যবহার করা উচিত ।
moi

12

আপনি pigzসংরক্ষণাগার চেকটি দ্রুত করতে * .tag.gz ফাইলের সামগ্রী (সমান্তরাল জিজিপ ) ব্যবহার করে পরীক্ষা করতে পারেন :

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

মিনি মাপদণ্ড: এটি 22 জি আর্কাইভে স্বীকৃত উত্তর টার-টিজভি: 143 এস সহ চলমান অবস্থায় পিগজ-সিভিডি: 80 এর সাথে চালানো।
ওয়াদিহ এম।

এই পদ্ধতিটি ব্যবহার করার সময় আপনি কীভাবে "টার: নেতৃবৃন্দের নাম থেকে নেতৃস্থানীয়` / 'সরানো "সম্পর্কে ক্রোনজব থেকে বিজ্ঞপ্তিটি সরিয়ে ফেলবেন?
ম্যাকসি 32

3

আমি নিম্নলিখিত কমান্ড চেষ্টা করেছি এবং তারা ভাল কাজ।

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

এটি BSD টারে ঘটে তবে জিএনইউ টারে নয়।
mcallister

1

এগুলি খুব উপ-অনুকূল সমাধান। থেকে GZIP বৈশিষ্ট

আইডি 2 (আইডেন্টিফিকেশন 2)
ফাইলটি জিজিপ ফর্ম্যাটে রয়েছে বলে চিহ্নিত করার জন্য এগুলির স্থির মান ID1 = 31 (0x1f, \ 037), ID2 = 139 (0x8b, \ 213) রয়েছে।

আপনি যে কোনও ভাষা ব্যবহার করছেন তাতে কোড করতে হবে।


যদি ফাইলটি কেটে ফেলা হয় তবে এটি সনাক্ত করার জন্য সম্পূর্ণ
ক্ষয় সংক্ষেপণের

0

> -O বিকল্পটি ব্যবহার করুন। [...] যদি টার ফাইলটি দূষিত হয়, ত্রুটি সহ প্রক্রিয়াটি বাতিল হয়ে যাবে।

কখনও কখনও হ্যাঁ, তবে কখনও কখনও না। আসুন একটি দূষিত ফাইলের উদাহরণ দেখুন:

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

তবে ফাইলটি দূষিত হয়েছিল, এটি এখন "পিট" এর পরিবর্তে "বোকা"।


লোকেরা খুব কমই কোনও সংক্ষেপণ ছাড়াই টার ফাইল ব্যবহার করে। আমি মনে করি আপনার মন্তব্যটি কেবল সঙ্কুচিত ফাইলগুলিকেই শ্রদ্ধা করে।
Jarekczek

6
আপনি দুর্নীতির সাথে অখণ্ডতা বিভ্রান্ত করছেন। আপনার ফাইলটি এর সততা হারিয়েছে তবে এটি এখনও একটি গ্রহণযোগ্য সংরক্ষণাগার ফর্ম্যাট।
ফিলি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.