আমি কি জিজেপ ব্যবহার করে একটি সম্পূর্ণ ফোল্ডারটি জিপ করতে পারি?


407

আমি ইউনিক্সে একটি ফোল্ডার জিপ করার চেষ্টা করছি। এটি কি gzip কমান্ড ব্যবহার করে করা যেতে পারে?


6
আপনি gzip -r myfolderযা ব্যবহার করতে পারেন যা পুনরাবৃত্তভাবে ফাইলগুলি জিপ করবে। একই পদ্ধতিতে আপনি ফাইলগুলি আনজিপ করতে পারেন gunzip -r myfolder যা পুনরাবৃত্তভাবে ফাইলগুলি আনজিপ করে। আরও তথ্যের জন্য, man gzip
ভ্যালেন্টাইন বাজরামি

12
ব্যবহার tar; এটি সংক্ষেপণের জন্য বিকল্পগুলি সমর্থন করে supports gzipপরিপূরক হিসাবে ডিজাইন করা হয়েছে tar, প্রতিস্থাপন হিসাবে নয়।
ডিভনুল

13
মনে রাখবেন যে @ val0x00ff এর পরামর্শ আপনি অবশ্যই যা অর্জন করতে চান তা প্রায় নয়।
শাদুর

4
@ শাদুর এই কারণেই আমি এটি পোস্ট করেছি commentকারণ এটি তার প্রশ্নের উত্তর ছিল না।
ভ্যালেন্টাইন বজরামি

2
@ শাদুর এর অর্থ কী তা বোঝাতে। প্রদত্ত ফাইল 1এবং 2ফোল্ডারের অধীনে playgroundgzip -r ./playgroundদিতে হবে 1.gzএবং 2.gz(আর 1এবং 2ফাইল) ফোল্ডারের অধীনে playgroundতাতে সবকিছু, না একটি জিপ করা ফাইল।
জেফ জিয়াও 12

উত্তর:


660

না।

বিপরীতে zip, কেবলgzip একটি সংক্ষেপণ অ্যালগরিদম হিসাবে ফাংশন ।

কারণ বিভিন্ন কারণের যা কিছু ফিরে টেপ ড্রাইভ যুগ কথা এর, ইউনিক্স নামে একটি প্রোগ্রাম ব্যবহার tarডেটা সংরক্ষণাগার, তারপর একটি কম্প্রেশন প্রোগ্রামের মত সাথে সংকুচিত করা যেতে পারে gzip, bzip2, 7zip, ইত্যাদি

ডিরেক্টরিটি "জিপ" করার জন্য সঠিক কমান্ডটি দেওয়া হবে

tar -zcvf archive.tar.gz directory/ 

এটি জানাতে tarহবে

  • z (gzip) অ্যালগোরিদম ব্যবহার করে এটি সংকুচিত করুন

  • সি (তৈরি) -এর ফাইলগুলি থেকে একটি সংরক্ষণাগার directory( tarডিফল্টরূপে পুনরাবৃত্ত হয়)

  • v (verbosely) তালিকা (on / dev / stderr যাতে এটি পাইপড কমান্ডগুলিকে প্রভাবিত করে না) সংরক্ষণাগারে যুক্ত করা সমস্ত ফাইল।

  • এবং আউটপুট নামের একটি f (ফাইল) হিসাবে সংরক্ষণ করুনarchive.tar.gz

tarকমান্ড উপলব্ধ করা হয় gzip(মাধ্যমে সহায়তা -zবিশুদ্ধরূপে আপনার সুবিধার জন্য পতাকা)। gzipকমান্ড / lib সম্পূর্ণরূপে পৃথক হয়। উপরের কমান্ডটি কার্যকরভাবে একই রকম

tar -cv directory | gzip > archive.tar.gz

আপনার ব্যবহৃত ডিরেক্টরিটি সংরক্ষণাগারটিকে সঙ্কুচিত করতে এবং আনপ্যাক করতে

tar -zxvf archive.tar.gz

যে কমান্ড কার্যকরভাবে একই

gunzip < archive.tar.gz | tar -xv

tarঅনেকগুলি, অনেকগুলি, অনেক অন্যান্য বিকল্প এবং পাশাপাশি ব্যবহার রয়েছে; আমি আন্তরিকভাবে এর ম্যানপেজটি দিয়ে কিছু সময় পড়ার পরামর্শ দিচ্ছি।


51
শুধু কিছু আরও বেশি স্পষ্ট করতে, এই ঠিক করার equivilant হয় tar -cv directory | gzip > archive.tar.gz। ফলস্বরূপ সংরক্ষণাগারটি তারপরেও tar -zxvfবা এমনকি বের করা যেতে পারে zcat file.tar.gz | tar -xv। পয়েন্টটি হ'ল টারটি জিজিপ থেকে সম্পূর্ণ স্বতন্ত্র, tarকমান্ডটিতে সুবিধার্থে জিজিপ সমর্থন অন্তর্ভুক্ত রয়েছে।
প্যাট্রিক 0

আমি tar cvzfবেশ কিছুদিন ধরে ব্যবহার করছি একটি বিষয় লক্ষণীয়: আপনি যদি 7-zipকোনও *.tar.gzফাইল আনজিপ করতে উইন্ডোজ ( নির্দিষ্ট করতে) ব্যবহার করেন তবে দুটি রাউন্ড লাগবে। প্রথমে *.tar.gzএকটি *.tarফাইলকে ফাইল আনজিপ করতে, পরেরটি সেই টার ফাইলটি মূল সামগ্রীতে আনজিপ করতে। এটি মোট আনজিপিং সময় বাড়িয়ে তোলে, বিশেষত বড় ফাইলগুলির জন্য (যেমন লগগুলি)
জেফ জিয়াও

1
সংরক্ষণাগারটির নামকরণ কি মেশিন ভিত্তিক কিছু প্রভাবিত করে? আমি জানি যে লোকেরা মূলত এটি জিপ করার জন্য ব্যবহৃত অ্যালগরিদমটি জানাতে (আপনারা .gz) বললে ভাল লাগবে, তবে এর বাইরে অন্যটি কি আসলে আপনি সংরক্ষণাগারটির নাম কী রাখবেন তা গুরুত্বপূর্ণ নয়?
হ্যালো_এখানে_আরডি

3
@hello_there_andy এটি বেশিরভাগ ইউনিক্সে কোনও পার্থক্য রাখে না, তবে উইন্ডোজ (এবং লিনাক্সে স্মার্ট ট্যাব সমাপ্তি) ফাইলের নাম এক্সটেনশনের উপর ভিত্তি করে অনুমানগুলি তৈরি করবে।
শাদুর

1
@ ভাদিমকোটভ এটি আপনি যা খুঁজছেন তা হতে পারে: superuser.com/questions/168749/…
শাদুর

47

gzipকমান্ড যাও recursively যখন ব্যবহার করে একটি একক ZIP ফাইল মধ্যে একটি ডিরেক্টরি কম্প্রেস করা হবে না -rসুইচ। বরং এটি সেই ডিরেক্টরি কাঠামোটি অনুসরণ করবে এবং প্রতিটি ফাইল এটি জিপ করে যা এটি একটি পৃথক ফাইলে সন্ধান করে।

উদাহরণ

আগে

$ tree dir1/
dir1/
|-- dir11
|   |-- file11
|   |-- file12
|   `-- file13
|-- file1
|-- file2
`-- file3

এখন gzipকমান্ড চালান

$ gzip -r dir1

পরে

$ tree dir1/
dir1/
|-- dir11
|   |-- file11.gz
|   |-- file12.gz
|   `-- file13.gz
|-- file1.gz
|-- file2.gz
`-- file3.gz

আপনি যদি ডিরেক্টরি কাঠামোটি জিপ আপ করতে পছন্দ করেন তবে আপনি সম্ভবত tarকমান্ডটি ব্যবহার করতে চান , এবং তারপরে ফলস্বরূপ .tarফাইলটি সংকোচিত করতে চান ।

$ tar zcvf dir1.tar.gz dir1/

উদাহরণ

$ tar zcvf dir1.tar.gz dir1/
dir1/
dir1/file1
dir1/file2
dir1/dir11/
dir1/dir11/file11.gz
dir1/dir11/file12.gz
dir1/dir11/file13.gz
dir1/file3

যা নিম্নলিখিত একক ফাইলের ফলাফল:

$ ls -l | grep tar
-rw-rw-r-- 1 saml saml  271 Oct  1 08:07 dir1.tar.gz

আপনি এর বিষয়বস্তু নিশ্চিত করতে পারেন:

$ tar ztvf dir1.tar.gz 
drwxrwxr-x saml/saml         0 2013-10-01 08:05 dir1/
-rw-rw-r-- saml/saml         0 2013-10-01 07:45 dir1/file1
-rw-rw-r-- saml/saml         0 2013-10-01 07:45 dir1/file2
drwxrwxr-x saml/saml         0 2013-10-01 08:04 dir1/dir11/
-rw-rw-r-- saml/saml        27 2013-10-01 07:45 dir1/dir11/file11.gz
-rw-rw-r-- saml/saml        27 2013-10-01 07:45 dir1/dir11/file12.gz
-rw-rw-r-- saml/saml        27 2013-10-01 07:45 dir1/dir11/file13.gz
-rw-rw-r-- saml/saml         0 2013-10-01 07:45 dir1/file3

4

আমি এই 2 টি কমান্ড স্ক্রিপ্ট করেছি:

gzipdir:

#!/bin/bash
if [[ -d $1 ]]; then
    cd "$1"
    cd ..
    base=$(basename "$1")
    tar -zcvf "$base.tgz" "$base"
    if [[ $? == 0 && -f "$base.tgz" ]]; then
        rm -rf "$base"
    fi
else
    echo "Usage: $0 DIRECTORY";
fi

ungzipdir:

#!/bin/bash
if [[ -f $1 ]]; then
    base=${1%%.*}
    file=$(basename "$1");
    dir=$(basename "$base");
    if [[ ! -d $base ]]; then
        mkdir "$base"
        cd "$base"
        cd ..
        tar -xvf "$file"
        if [[ $? == 0 && -d "$dir" ]]; then
            rm -f "$file"
        fi
    else
        echo "Directory $base already exists. Nothing done."
    fi
else
    echo "Usage: $0 file.tgz";
fi

(!!!) দয়া করে ব্যবহারের আগে পরীক্ষা করুন (যেহেতু একটি 'আরএম-ফ' রয়েছে যা কোনও অস্বাভাবিক উপায়ে ব্যবহার করা হলে গুরুত্বপূর্ণ ডেটাগুলি সম্ভাব্যভাবে সরিয়ে ফেলতে পারে)।

কিভাবে ব্যবহার করে:

cd /home/; gzipdir MyDirectory অথবা gzipdir /home/MyDirectory

/Home/MyDirectory.tgz তৈরি করবে এবং সাফল্যের উপর MyDirectory অপসারণ করবে (!!!)।

ungzipdir /home/MyDirectory.tgz

/ হোম / মাই ডাইরেক্টরি তৈরি করবে এবং সাফল্যের উপর / home/MyDirectory.tgz সরিয়ে দেবে।


ডিরেক্টরিতে সমস্ত ফাইল জিপআপ করতে: find ./* -maxdepth 0 -type d -exec gzipdir {} \; (ফাইন্ড কমান্ডটি সম্পর্কে সতর্কতা অবলম্বন করুন, এটি -exec echo {}প্রথমে পরীক্ষা করুন এবং নিশ্চিত করুন যে আপনি './' ক্যাপচার করছেন না যা সম্ভবত আপনার পুরো হোম ডিয়ারটি ভেঙে দেবে)
অ্যান্ড্রু লরিয়েন

1

আমি ব্যবহার করার পরামর্শ দিই pigz( জিজেপ সমান্তরাল বাস্তবায়ন )

tar -cvf - dir | pigz -9 > /path/to/dir.tar.gz


আমি এটিকে খুব বেশি (এবং পিক্স) ব্যবহার করি তবে পাইপ এবং আউটপুট পুনর্নির্দেশ কার্যকর হলে এটি কী কাজ করে?
মাইকেল উলফ

1

সিনট্যাক্সটি ব্যবহার করা হচ্ছে "লিনাক্সের উপরে জিপ ব্যবহার করে আমি কী একটি সম্পূর্ণ ফোল্ডারটি জিপ করতে পারি?" প্রশ্নের প্রশ্নের উত্তর:

zip -r <zip file name> <folder to zip>

আপনার যদি নতুন প্রশ্ন থাকে তবে দয়া করে প্রশ্ন জিজ্ঞাসা বোতামটি ক্লিক করে এটি জিজ্ঞাসা করুন । যদি এই প্রসঙ্গে সরবরাহ করতে সহায়তা করে তবে এই প্রশ্নের একটি লিঙ্ক অন্তর্ভুক্ত করুন। - পর্যালোচনা থেকে
জেফ শ্যাচলার

2
@ জেফ শ্যাচলার: এটি একটি উত্তর। এটি মারাত্মকভাবে ভুল (আমি বিশ্বাস করি), তবে এটি পরিষ্কারভাবে একটি উত্তর।
স্কট

1
@ize: আমি নিশ্চিত যে আপনার পোস্ট করা কমান্ডটি জিজিপ ব্যবহার করে না।
ধাগ

1
জিপ ব্যবহারের জন্য প্রশ্ন যেমন জিজ্ঞাসা করা হয়েছে, সম্ভবত উইন্ডোতে তিনি যেমন করতেন ঠিক তেমন কাজ করা সম্ভব বলেই লেখক এটি জানতে চাইতেন। এটি দুঃখজনক যে বেশিরভাগ মানুষ এতদূর ভাবতে চায় না।
ফ্লোরিয়ান হিগল

2
প্রশ্নটি যখন নির্দিষ্ট করে ... "জিজিপ ব্যবহার করে" এটি মুশকিল।
জেফ স্ক্যালার হলেন

1

সম্পূর্ণতার জন্য, আপনি যদি পটভূমিতে ফাইলটি ট্যার করতে চান তবে @ শাদুরের উত্তরটি ব্যবহার করুন &এবং শেষ পর্যন্ত যুক্ত করুন:

tar -zcvf archive.tar.gz directory/ &

0

যদি আপনার লিনাক্স টারটি -zবিকল্পটি সমর্থন না করে তবে আপনি নিম্নলিখিতটি ব্যবহার করতে পারেন:

tar -cvf - dir | gzip > dir.tar.gz
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.