জিপ ফাইলে অযাচিত পথ এড়িয়ে চলুন


49

আমি কিছু ফাইল প্যাকেজ করতে শেল স্ক্রিপ্ট তৈরি করছি। আমি এই জাতীয় ডিরেক্টরি জিপ করছি:

zip -r /Users/me/development/something/out.zip /Users/me/development/something/folder/

সমস্যাটি হ'ল ফলস্বরূপ আউট.জিপ সংরক্ষণাগারটিতে এটির পুরো ফাইল পাথ রয়েছে। এটি, যখন আনজিপ করা হবে, এতে এতে পুরো "/ ব্যবহারকারী / আমার / বিকাশ / অন্য কিছু /" পথ থাকবে। কোনও সংরক্ষণাগারটিতে ডিরেক্টরি স্থাপন করার পরে কি এই গভীর পথগুলি এড়ানো সম্ভব?

আমি যখন লক্ষ্য ডিরেক্টরিটির ভিতরে থেকে জিপ চালাই, তখন আমার এই সমস্যা হয় না।

zip -r out.zip ./folder/

এই ক্ষেত্রে, আমি সমস্ত আবর্জনা পাই না। যাইহোক, প্রশ্নযুক্ত স্ক্রিপ্টটি যে কোনও জায়গা থেকে কল করা হবে।

FWIW, আমি ম্যাক ওএস এক্স 10.6 এ ব্যাশ ব্যবহার করছি।

উত্তর:


85

আপনার স্ক্রিপ্ট ব্যবহার করা উচিত cdবা pushdএবং popdযে ডিরেক্টরি সংরক্ষণাগার রুট হতে হবে সরাতে আগে জারি zipকমান্ড। আপনি কীভাবে এটি করবেন তা নির্ভর করবে স্ক্রিপ্ট কীভাবে জপ আপ করবে। কিন্তু, যদি তুমি চাও / ব্যবহারকারীরা / ME / উন্নয়ন / কিছু / ফোল্ডার শুধু অভ্যন্তরীণ পাথ সঙ্গে জিপ করা ./folder , আপনি এই যা করতে হবে চাই:

pushd /Users/me/development/something
zip -r /path/to/out.zip ./folder/
popd

এটির ফলে আপনার আউট.জিপটি আপনার পছন্দসই পাথগুলিতে ধারণ করবে।

এটির স্ক্রিপ্টিংয়ের জন্য যদি আপনার সহায়তার দরকার হয় তবে আপনাকে আমাদের স্ক্রিপ্টটি দেখাতে হবে।


8
সমস্যা নেই. আমি $ pushd /some/path ; do-something ; popd$ ( cd /some/path ; do-something )
কমান্ডলাইনে সারাক্ষণ ওয়ান-লাইনারে

1
@। কোয়াকটি: +1 বিশেষত মন্তব্যে সাব-শেল কৌশলটির জন্য।
জোনাথন লেফলার

1
&&পরিবর্তে ব্যবহার ;করা একটি ভাল ধারণা যাতে cdব্যর্থ হলে (অন্য টাইপো, বা অন্য সমস্যা) অন্য কমান্ডটি চালিত না হয় :(cd /some/path && do-something)
ক্রিস জনসন

3
জিপ ফাইলের জন্য নিখুঁত পথ নির্দিষ্ট না করে কী করার উপায় নেই?
কমলা 80

2
তুমি পথ নিয়ে গেম খেলছ কেন? কেন ব্যবহার zip -jকরবেন না ?
jww

5

সমস্যাটি হ'ল ফলস্বরূপ আউট.জিপ সংরক্ষণাগারটিতে এটির পুরো ফাইল পাথ রয়েছে।
...
কোনও সংরক্ষণাগারটিতে ডিরেক্টরি স্থাপন করার পরে কি এই গভীর পথগুলি এড়ানো সম্ভব?

হ্যাঁ. -jসাথে বিকল্পটি ব্যবহার করুন zip-jহ'ল "পথের জঞ্জাল"। জিপের ম্যান পেজ অনুসারে :

কেবলমাত্র একটি সংরক্ষিত ফাইলের নাম সংরক্ষণ করুন (পাথ জাঙ্ক) এবং ডিরেক্টরিগুলির নাম সংরক্ষণ করবেন না। ডিফল্টরূপে, জিপ পুরো পাথ (বর্তমান ডিরেক্টরি সম্পর্কিত) সংরক্ষণ করবে।

ব্যবহার -jকরে নিম্নলিখিত কমান্ডটি বোঝানো হয়েছে:

zip -j myarchive.zip file1.txt dir1/file2.txt dir2/dir3/file3.txt ../file4.txt

দেখতে এমন একটি সংরক্ষণাগার তৈরি করবে:

myarchive.zip
    |
    +-- file1.txt
    +-- file2.txt
    +-- file3.txt
    +-- file4.txt

5
এটি কি সমস্ত পাথ এমনকি 'ফোল্ডার' ডিরেক্টরিতেও জঞ্জাল করে না? আমি মনে করি ওপি কেবল কমান্ড লাইনের পথ থেকে মুক্তি পেতে চায়।
পিটার জারিক

1
এটি এই প্রশ্নের উত্তর নাও হতে পারে তবে এটি আমার প্রয়োজন।
অ্যারন ম্যাকমিলিন

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

1

নেই pushdএবং popdএবং $OLDPWD। ধরে নেওয়া যাক $PWDকরা হয় /Users/me/developmentএকটি করুন:

pushd something/folder
zip -r $OLDPWD/something/out.zip *
popd

এখন $PWDফিরে/Users/me/development

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