আমি কীভাবে কমান্ড লাইনে একাধিক ফাইলগুলি জিপ আপ করব?


16

এই সর্বাধিক প্রাথমিক প্রশ্নটি ক্ষমা করুন, তবে স্ট্যাক এক্সচেঞ্জের আমি সরাসরি উত্তর বা সহজ উদাহরণ খুঁজে পাইনি।

ধরা যাক যে আমার কাছে ফাইলগুলির একটি ফোল্ডার রয়েছে যা আমি আমার জিপ ফাইলগুলিতে একটি সংক্ষিপ্ত করতে চাই যা আমি আমার ভয়ঙ্কর উইন্ডোজ বন্ধুদের সাথে ভাগ করতে পারি (অন্যথায় আমি কেবল এটি ব্যবহার tarকরব এবং এটি দিয়ে শেষ করব)। দেখে মনে হচ্ছে:

.
├── file1.txt
├── file2.txt
├── file3.txt
├── file.jpg
└── test.jpg

ধরে নিচ্ছি যে আমি zipইনস্টল করেছি:

sudo apt-get install zip

আমি দেখতে পাচ্ছি man zipযে এটি আমাকে একটি ফাইল তালিকা ব্যবহার করতে দেয়:

- @ ফাইল তালিকা। যদি কোনও ফাইল তালিকা - @ [ম্যাকোজে নেই] হিসাবে নির্দিষ্ট করা থাকে তবে জিপ কমান্ড লাইনটির পরিবর্তে স্ট্যান্ডার্ড ইনপুট থেকে ইনপুট ফাইলগুলির তালিকা নেয় of উদাহরণ স্বরূপ,

          zip -@ foo

সুতরাং আমি তৈরি করেছি zip.lstযা দেখতে এরকম দেখাচ্ছে:

cat zip.lst

file1.txt
file2.txt
file3.txt
file.jpg
test.jpg

এবং এখন আমি চেষ্টা করেছি:

zip -@ zip.lst

তবে এটি কনসোলে একটি ফাঁকা লাইন তৈরি করা ছাড়া কিছুই করেনি। এবং আমি ঠেলাঠেলি চালিয়ে যেতে পারি Enterএবং এটি কমান্ডটি আপাতদৃষ্টিতে প্রয়োগ না করে কেবল আরও ফাঁকা রেখা তৈরি করে রাখে। কিছু অনুসন্ধানের পরে, আমি বুঝতে পারি যে আমাকে Ctrl+ টিপে ইনপুট সমাপ্ত করা দরকারD

তবে এখন আমি এই ত্রুটিটি পেয়েছি:

    zip warning: missing end signature--probably not a zip file (did you
    zip warning: remember to use binary mode when you transferred it?)
    zip warning: (if you are trying to read a damaged archive try -F)

zip error: Zip file structure invalid (zip.lst)

কি!? আমার সাধারণ তালিকাটি কীভাবে একটি "বৈধ ফাইল কাঠামো" নয়? আরও তথ্যের জন্য ম্যানুয়ালটিতে ফিরে আসুন এবং আমি এটিকে আরও কাছাকাছি দেখব:

যদি একটি ফাইল তালিকা হিসাবে উল্লেখ করা হয় - @ ...

সুতরাং আমি এটি ছাড়াই চেষ্টা করেছি -@এবং এটি কমপক্ষে Ctrl+ টিপুন না করেই সরাসরি এটি প্রক্রিয়া করে Dতবে আমি একই ত্রুটিটি দিয়ে চলেছি ।

ভাগ্যক্রমে, আমি প্রায় সম্পর্কিত না হওয়া প্রশ্নের উত্তরের একটি মন্তব্য পেয়েছি যা আমাকে বুঝতে পেরেছিল যে আমার জিপ ফাইলের স্পষ্টভাবে নামকরণ করা দরকার। এই ত্রুটিটি ঘটেছে কারণ ডিফল্টরূপে এটি কল করা একটি জিপ ফাইল তৈরি করার চেষ্টা করেছিল zip.lst। তবে যেহেতু এটি আমার তালিকার নাম, তাই কেউ মনে করতে পারে যে এটি কেবল এটিকে ওভাররাইট করবে, কিন্তু না, এটি আসলে এটি আপডেট করার চেষ্টা করছিল। এবং যেহেতু তালিকাটি অবশ্যই একটি জিপ ফাইল নয়, তাই আমরা অবৈধ ফাইলের কাঠামোর ত্রুটি পেয়েছি এবং এখন এটি স্পষ্ট হয়ে গেছে কেন এটি সম্ভবত "একটি জিপ ফাইল নয়" said তাহলে আমি চেষ্টা করেছি:

zip files.zip zip.lst

adding: zip.lst (deflated 35%)

ইউরেকা! আমি দেখতে পারি জিপ ফাইলটি তৈরি হয়েছিল এবং আমার ফোল্ডারে এখন এটি রয়েছে:

.
├── file1.txt
├── file2.txt
├── file3.txt
├── file.jpg
├── files.zip
├── test.jpg
└── zip.lst

তবে আমরা উদযাপনের আগে অপেক্ষা করুন, আসুন প্রথমে জিপ ফাইলের বিষয়বস্তু নিশ্চিত করুন:

unzip -l files.zip

Archive:  files.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
       48  2016-05-24 15:30   zip.lst
---------                     -------
       48                     1 file

না! ওয়েল, আসলে এটি স্ট্যান্ডার্ড ব্যবহার থেকে বোঝায় কারণ এটি কেবল একটি তালিকা ফাইলটি আমি দিয়েছি z শেষ পর্যন্ত আমি আবার চেষ্টা করেছি -@কিন্তু একই ফলাফল পেয়েছি।

আমি কি ভুল করছি?

বিটিডাব্লু, আমি জানি আমি জিইআইআই ব্যবহার করতে পারি এবং এটি আমার মাউস দিয়ে করতে পারি, তবে আমার এটির স্ক্রিপ্ট করা দরকার এবং আমি কী করছি তা জানার পরে সাধারণভাবে আমি সিএলআই-তে দ্রুততর।

উত্তর:


23

ফাইল <পুনঃনির্দেশ ব্যবহার করুন

zip files.zip -@ < zip.lst

অথবা আপনি তালিকাটি এড়িয়ে যেতে পারেন এবং কেবল গ্লোবাল

zip files.zip *.txt *.jpg

ধন্যবাদ স্টিল্ড্রাইভার

.তিহাসিক উত্তর

আমি আনন্দিত যে আমার নিজের প্রশ্নের উত্তর দেওয়া ঠিক আছে কারণ আমি আমার অশান্তিটি ক্রনিকল করতে চেয়েছিলাম এই আশা নিয়ে যে আমার চোখের পানির পিছনে থাকা অন্যরা কিছু মূল শব্দ অনুসন্ধান করে বাঁচাতে পারবেন।

অবশেষে, আমি সঠিক উত্তরটি আবিষ্কার করেছিলাম , তবে এটি ভুল প্রশ্নে পোস্ট করা হয়েছিল ।

স্বচ্ছতার কয়েকটি দফা:

  • ম্যানুয়ালটি কোনও ফাইলের মতো আক্ষরিক তালিকার উল্লেখ করছে না, বরং আক্ষরিকভাবে কনসোলে ফাইলগুলি তালিকাভুক্ত করার জন্য।
  • এটি বোধগম্য যে কেউ fooএই ফাইলটি তালিকার উল্লেখ করে এমন ভ্রান্তিতে ভ্রান্ত হতে পারে তবে এটি প্রকৃতপক্ষে আউটপুট জিপ ফাইলের নাম উপস্থাপন করার উদ্দেশ্যে।
  • ফাইলগুলির তালিকা উদাহরণে বাদ দেওয়া হয়েছে কারণ এটি -@স্যুইচটি ব্যবহার করছে যা এটি দেখায় যে " কমান্ড লাইনের পরিবর্তে স্ট্যান্ডার্ড ইনপুট থেকে ইনপুট ফাইলগুলির তালিকা নেওয়া হয় "

এটি বুঝতে পেরে, আমরা এখন লক্ষ্যটি অর্জনের জন্য বিভিন্ন উপায়ে সজ্জিত।

প্রথমে আমরা তৈরি ফাইল তালিকাটি ব্যবহার করে, আমরা তালিকাটি পড়তে পারি catএবং জিপের জন্য স্ট্যান্ডার্ড ইনপুট হিসাবে পাইপের সাহায্যে আউটপুটটিকে পুনর্নির্দেশ করতে পারি:

cat zip.lst | zip -@ files.zip

  adding: file1.txt (stored 0%)
  adding: file2.txt (stored 0%)
  adding: file3.txt (stored 0%)
  adding: file.jpg (stored 0%)
  adding: test.jpg (stored 0%)

দেখতে দেখতে যে adding: ...অবশ্যই একটি ভালো লক্ষণ প্রতিটি ফাইলের জন্য, কিন্তু আমরা আমাদের আশা আপ করার আগে, তাই আসুন শুধু নিশ্চিত দিন ছিল করেছি:

unzip -l files.zip

Archive:  files.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  2016-05-24 14:54   file1.txt
        0  2016-05-24 14:54   file2.txt
        0  2016-05-24 14:54   file3.txt
        0  2016-05-24 15:00   file.jpg
        0  2016-05-24 14:59   test.jpg
---------                     -------
        0                     5 files

খুব সুন্দর! তবে যে কোনওভাবে ওয়ানটাইম-ব্যবহারের তালিকা তৈরি করতে চায়? এই নির্দিষ্ট পরিস্থিতি সমাধানের এটি একটি ভয়ঙ্কর রাউন্ড। lsজিপ করার জন্য একটি তালিকা এবং পাইপ পাওয়া ভাল :

ls | zip -@ files.zip

  adding: file1.txt (stored 0%)
  adding: file2.txt (stored 0%)
  adding: file3.txt (stored 0%)
  adding: file.jpg (stored 0%)
  adding: test.jpg (stored 0%)

অবিশাস্য! এখন আসুন grepউদাহরণস্বরূপ jpg এর জিপ আপ করার দুর্দান্ত ক্ষমতা সহ ফিল্টারগুলি তৈরি করুন :

ls | grep .jpg | zip -@ images.zip

  adding: file.jpg (stored 0%)
  adding: test.jpg (stored 0%)

অথবা কেবল "ফাইল" দিয়ে শুরু ফাইলগুলি

ls | grep file. | zip -@ files.zip

  adding: file1.txt (stored 0%)
  adding: file2.txt (stored 0%)
  adding: file3.txt (stored 0%)
  adding: file.jpg (stored 0%)

5
এর পরিবর্তে ব্যবহার করার lsএবং grepএবং পিন এর -@, ফাইলগুলি জিপ কমান্ড লাইন যেমন সরাসরি নির্বাচন করতে শেল globs ব্যবহার করতে পারেন zip files.zip file*বা zip images.zip *.jpg। এছাড়াও, কোনও ফাইল থেকে ফাইলের zip files.zip -@ < zip.lst
নামের

আপনি ফাইলের পাশাপাশি নেস্টেড ডিরেক্টরি দিয়ে এই কাজটি কীভাবে করতে পারেন?
বলপয়েন্টবেন

@ বালপয়েন্টটি আমি এর findপরিবর্তে ব্যবহার করতামls
জেফ

6

সর্বাধিক সংক্ষেপণ স্তর সহ সর্বাধিক সহজ কমান্ড

zip -9 -r filename.zip /path/to/dir singlefile.jpg 
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.