সাব-ফোল্ডার ছাড়াই একাধিক ফাইল সহ একটি জিপ কীভাবে তৈরি করবেন?


12

প্রাথমিক অবস্থা:

.
├── d0
├── f0
├── f1
│   └── d1
└── f2
    └── f3
        ├── d2
        ├── d3
        └── d4

আমাকে কী করতে হবে:

আমি d0, d1 এবং d4 সমন্বিত একটি জিপ তৈরি করতে চাই যার অবশ্যই পতিত কাঠামো থাকতে হবে:

.
├── d0
├── d1
└── d4

আমি ইতিমধ্যে যা চেষ্টা করেছি:

আমি এটি দিয়ে চেষ্টা করেছি zip myfiles d0 f1/d1 f2/f3/d4। তবে এটি মূল ফোল্ডারের কাঠামো রাখে, যা আমি চাই না।

.
├── d0
├── f1
│   └── d1
└── f2
    └── f3
        └── d4

প্রশ্ন সাব-ফোল্ডার ছাড়া একাধিক ফাইলের সাথে একটি জিপ কিভাবে তৈরি করবেন?

উত্তর:


17

ম্যানুয়ালি, আপনি জিপ ফাইল তৈরি করতে পারেন এবং এটি আপডেট করুন:

zip myfiles d0
(cd f1; zip -u ../myfiles.zip d1)
(cd f2/f3; zip -u ../../myfiles.zip d4)

প্রথম বন্ধনীগুলি সাবশেলগুলি তৈরি করে এবং একমাত্র এর প্রভাব cdসাবসেলের মধ্যে স্থায়ী হয়, সুতরাং আপনাকে cdমূল ডিরেক্টরিতে ফিরে আসতে হবে না ।

যদি d1, d2ইত্যাদি প্রকৃতপক্ষে ফাইল হয় এবং নিজেই ডিরেক্টরি না হয় তবে -jবিকল্পটি ব্যবহার করুন :

-J
--junk-পাথ
ঠিক একটি সংরক্ষিত ফাইল (আবর্জনা পথ) নামে সঞ্চয় করবে এবং ডিরেক্টরির নাম সঞ্চয় করবেন না। ডিফল্টরূপে, জিপ পুরো পাথ (বর্তমান ডিরেক্টরি সম্পর্কিত) সংরক্ষণ করবে।


19

আপনি findফাইল তালিকা পেতে ব্যবহার করতে পারেন এবং zip -j myfilesরাস্তা উপেক্ষা করে তাদের প্যাক করতে কার্যকর করতে পারেন:

find . -name "d[014]" -exec zip -j myfiles {} +

উদাহরণ

$ tree
.
├── d0
├── f0
├── f1
│   └── d1
└── f2
    └── f3
        ├── d2
        ├── d3
        └── d4

$ find . -name "d[014]" -exec zip -j myfiles {} +
  adding: d1 (stored 0%)
  adding: d4 (stored 0%)
  adding: d0 (stored 0%)

$ unzip -l myfiles.zip
Archive:  myfiles.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  2017-10-09 10:47   d1
        0  2017-10-09 10:48   d4
        0  2017-10-09 10:47   d0
---------                     -------
        0                     3 files

তবে এটি কেবল ফাইলগুলির জন্য কাজ করে , ডিরেক্টরিগুলি এড়ানো হবে zip -j। খুব ডিরেক্টরি জন্য এই কাজ করে তার জন্য, বলতে আমরা প্যাক করতে চান d0, d1এবং সমগ্র f3উপরোক্ত উদাহরণের ডিরেক্টরি, findলাইন একটু বেশি জটিল পায়:

$ find . \( -name "d[01]" -o -name "f3" \) -exec sh -c 'p=$(pwd); for i in $0 $@; do cd ${i%/*}; zip -ur "$p"/myfiles ${i##*/}; cd "$p"; done' {} +
        zip warning: /home/dessert/myfiles.zip not found or empty
  adding: d1 (stored 0%)
  adding: f3/ (stored 0%)
  adding: f3/d3 (stored 0%)
  adding: f3/d2 (stored 0%)
  adding: f3/d4 (stored 0%)
  adding: d0 (stored 0%)
$ unzip -l myfiles.zip 
Archive:  myfiles.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  2017-10-11 10:18   d1
        0  2017-10-11 10:19   f3/
        0  2017-10-11 10:19   f3/d3
        0  2017-10-11 10:19   f3/d2
        0  2017-10-11 10:19   f3/d4
        0  2017-10-11 10:17   d0
---------                     -------
        0                     6 files

18

-J বিকল্পটি ব্যবহার করা ফাইল থেকে পথ সরিয়ে ফেলবে।

zip -j myfiles d0 f1/d1 f2/f3/d4 

উল্লেখ


আপনি যে পথগুলির মধ্য দিয়ে যাচ্ছেন সেগুলির মধ্যে যদি কোনও ফাইল না হয় তবে ডিরেক্টরি হয় তবে সেই ডিরেক্টরিগুলি বিকল্পযুক্ত zipফাইলটিতে যুক্ত করা হবে না -j
ড্যান

@ উদ্যান - আপনি যদি কোনও ডিরেক্টরিতে সমস্ত ফাইল চান তারপথে পথটি বের করেনzip -j myfiles directory/*
রাভারি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.