জিজেপ করা ফাইল খালি কিনা তা আমি কীভাবে পরীক্ষা করতে পারি?


10

কোনও জিপিড ফাইল ফাঁকা আছে কিনা তা পরীক্ষা করার কোনও দ্রুত উপায় আছে, বা আমাকে প্রথমে আনজিপ করতে হবে?

উদাহরণ:

$ touch foo
$ if [ -s foo ]; then echo not empty; fi
$ gzip foo
$ if [ -s foo.gz ]; then echo not empty; fi
not empty
$ wc -l foo.gz
      1 foo.gz

উত্তর:


8

gzip -l foo.gz | awk 'NR==2 {print $2}' সঙ্কুচিত তথ্যের আকার মুদ্রণ করে।

if LC_ALL=C gzip -l foo.gz | awk 'NR==2 {exit($2!=0)}'; then
  echo foo is empty
else
  echo foo is not empty
fi

বিকল্পভাবে আপনি ডেটা সঙ্কুচিত করা শুরু করতে পারেন।

if [ -n "$(gunzip <foo.gz | head -c 1 | tr '\0\n' __)" ]; then
    echo "foo is not empty"
else
    echo "foo is empty"
fi

(যদি আপনার সিস্টেমে head -cপ্রথম বাইট বের করতে না হয় তবে তার head -n 1পরিবর্তে প্রথম লাইনটি বের করার জন্য ব্যবহার করুন ))


আমি ধরে নিচ্ছি LC_ALL=Cযে জিজিপ হাজার সংখ্যক বিভাজক সংখ্যায় রাখে না যাতে ক্ষেত্রটি শূন্যের সাথে তুলনা করা যায়?
ক্যামহ

1
@ ক্যামহ: কমান্ড থেকে ফর্ম্যাট করা আউটপুট পার্স করার সময় এটি আরও সাধারণ প্যারানোইয়া। এটি সংখ্যার ফর্ম্যাট হতে পারে, বা কোনও ভাষায় দুটি শিরোলেখ রেখা বা অন্য অনেকগুলি বিষয় যা আমি স্রেফ ভাবিনি। জিজিপের ক্ষেত্রে, আমি মনে করি খারাপ কিছুই হয় না, তবে LC_ALL=Cআঘাত করতে পারে না।
গিলস 'অশুভ হওয়া বন্ধ করুন'

1
দ্বিতীয় বিকল্পটি যদি ফাইলে ডেটা থাকে তবে নতুন লাইন না থাকলে ব্যর্থ হবে; এটি লাইনটি প্রিন্ট করবে না যেমন readএকটি সাব-শেলতে অনুরোধ করা হচ্ছে (এবং $lineপিতামাতার কাছে প্রচার করা হয় না)।
ক্রিস ডাউন

1
পছন্দ করেছেন যদিও আপনার সংশোধন যথেষ্ট নয় (প্লাস আপনি যেভাবে লিখেছেন তা কেবলমাত্র ব্যাশ কেবল)। যদি ফাইলটি নাল বাইট দিয়ে শুরু হয়, শেলটি (zsh ব্যতীত) খালি স্ট্রিংটি দেখাবে যখন এটি করা উচিত নয়। trঠিক করার মাধ্যমে পাইপ
গিলস 'তাই খারাপ হওয়া বন্ধ করুন'

4

যদি 'খালি' দ্বারা আপনি বোঝাচ্ছেন যে সঙ্কুচিত ফাইলটি 0 বাইট, আপনি gzip --list foo.gzসঙ্কুচিত ফাইলটির আকার নির্ধারণ করতে ব্যবহার করতে পারেন , এটি স্বয়ংক্রিয় করতে কিছু পার্সিংয়ের প্রয়োজন হবে। এটি দেখতে এমন কিছু দেখাচ্ছে:

$ gzip --list foo.gz
         compressed        uncompressed  ratio uncompressed_name
                 24                   0   0.0% foo

এটি মূলত উত্তর 1!
হেন্নো ব্র্যান্ডসমা

1
... যা এর পরে পোস্ট করা হয়েছিল।
jsbillings

2
test -z $(gzip -cd foo.gz | head -c1) && echo "empty"

বা সাথে if:

if [ -z $(gzip -cd foo.gz | head -c1) ]; then
  echo "empty"
fi

zcatকখনও কখনও যুক্ত হয় gunzip -cবা gzip -cdআপনি যদি এটির সংক্ষিপ্ত "ফর্ম" হিসাবে ব্যবহার করতে চান।


0

দয়া করে মনে রাখবেন যে gzip ফাইল ফর্ম্যাটটি কেবলমাত্র মূল ফাইলের আকার সংরক্ষণের জন্য 32 বিটকে মঞ্জুরি দেয়, সুতরাং সেখানে নম্বরটি মডিউল 2 ^ 32 রয়েছে। সুতরাং "gzip -l" দ্বারা প্রদত্ত আকার শূন্যতার জন্য একটি নির্দিষ্ট পরীক্ষা নয়।


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