ডিরেক্টরিতে সমস্ত ফাইল জিপ করবেন?


482

zipকমান্ড সহ কোনও প্রদত্ত ডিরেক্টরিতে সমস্ত ফাইল জিপ করার কোনও উপায় আছে ? আমি ব্যবহারের কথা শুনেছি *.*, তবে আমি এটি এক্সটেনশনহীন ফাইলের জন্যও কাজ করতে চাই।


2
আপনি কি আপনার পছন্দসই ডিরেক্টরি থেকে এক-স্তর উপরে নেভিগেট করার চেষ্টা করছেন zip myarch.zip mydir/*?
জোসেফ আর।

13
বা আরও ভালzip -r myarch.zip mydir/*
আদম

25
বা আরও ভালzip -r myarch.zip mydir
ctrl-alt-delor

*.*মানে বিন্দু সহ যে কোনও ফাইল। সিপি / এম এবং ডসগুলিতে সমস্ত ফাইলের একটি বিন্দু ছিল এবং এটি আপনাকে এটি টাইপ করেছে (করতে পারে না *)। অতএব লোকেরা *.*সমস্ত ফাইল হিসাবে দেখতে এসেছিল । অবশেষে মাইক্রোসফ্ট দীর্ঘ-ফাইলের নাম যুক্ত করে যার শূন্য বা আরও বেশি বিন্দু থাকতে পারে। উইন্ডোতে একটি বিন্দুযুক্ত একটি ফাইল সন্ধান করতে আপনাকে টাইপ করতে হবে *.*.*
ctrl-alt-delor

উত্তর:


704

আপনি কেবল ব্যবহার করতে পারেন *; কোন প্রয়োজন নেই *.*। ফাইল এক্সটেনশনগুলি ইউনিক্সে বিশেষ নয়। *শূন্য বা আরও বেশি অক্ষরের সাথে মেলে। একটি বিন্দু সহ। সুতরাং এটি মেলে foo.png, কারণ এটি শূন্য বা আরও বেশি অক্ষর (সাত, সঠিক হতে)।

নোট করুন যে *ডিফল্টরূপে কোনও বিন্দু দিয়ে ফাইল শুরু হয় না (হয় না *.*)। এটি প্রায়শই আপনি চান। যদি তা না হয় তবে ব্যাশে, আপনি যদি shopt -s dotglobএটি করেন তবে (তবে তবুও বাদ দেবেন .এবং ..)। অন্যান্য শাঁসের ডটফাইলগুলি অন্তর্ভুক্ত করার বিভিন্ন উপায় রয়েছে (বা কিছুই নয়)।

বিকল্পভাবে, একবারে সম্পূর্ণ ডিরেক্টরি গাছগুলি করার zipজন্যও -r(পুনরাবৃত্ত) বিকল্প রয়েছে (এবং ডটফাইলে সমস্যা নিয়ে চিন্তার দরকার নেই):

zip -r myfiles.zip mydir

mydirডিরেক্টরি যেখানে আপনার ফাইল রয়েছে। নোট করুন যে উত্পাদিত জিপটিতে ফাইলের পাশাপাশি ডিরেক্টরি কাঠামো থাকবে। পিটার্ফ তাঁর মন্তব্যে যেমন উল্লেখ করেছেন, এটি সাধারণত একটি ভাল জিনিস হিসাবে দেখা যায়: জিপটি উত্তোলন করা সমস্ত নিষ্ক্রিয় ফাইলগুলিকে একটি সাব-ডিরেক্টরিতে ঝরঝরে করে সংরক্ষণ করবে।

আপনি জিপটি -j/ --junk-pathsবিকল্পের সাথে পাথগুলি সংরক্ষণ না করতে বলতে পারেন ।

zipকমান্ড তার (অনেক) সমস্ত বিকল্পগুলির সম্পর্কে আপনি কহন ডকুমেন্টেশন দিয়ে আসে; man zipযে ডকুমেন্টেশন দেখতে টাইপ করুন । এই জিপ অনন্য নয়; আপনি বেশিরভাগ কমান্ডের জন্য এইভাবে নথিপত্র পেতে পারেন।


9
আপনি যোগ করতে চাইতে পারেন, এটি সংরক্ষণের সমস্ত কিছু শীর্ষ স্তরের ডিরেক্টরিতে অন্তর্ভুক্ত করা একটি ভাল অনুশীলন হিসাবে বিবেচিত হয় - যাতে কেউ তার / তার বর্তমান ডিরেক্টরিটি নিষ্কাশনের ক্ষেত্রে কলুষিত না করে।
পিটার্ফ

@ পেপারফ হয়ে গেছে। যদিও জিপ ফাইলগুলিতে এটি উদাহরণস্বরূপ, ট্যারিফাইলগুলির চেয়ে কম কনভেনশন, তবে আমি ভীত।
ডার্বোবার্ট

দুর্ভাগ্যবশত হ্যাঁ. সম্ভবত উইন্ডোজ heritageতিহ্যের কারণে ডেস্কটপটিতে ড্রাগ'ড্রপ এবং সোর্স কোডগুলির সাথে কাজ করার লিনাক্স হেরিটেজ।
পিটার্ফ

2
মনে রাখবেন যে *শেল-গ্লোববিংয়ের মধ্যে ডটফাইলগুলি অন্তর্ভুক্ত নয় (যেমন ফাইলের নাম দিয়ে শুরু করা .)। পুরো ডিরেক্টরিটি নাম দিয়ে জিপ করাতে এটি আরেকটি সুবিধা।
এমআরবি

তবে -r ব্যবহারের মধ্যে ডিরেক্টরি নিজেই অন্তর্ভুক্ত থাকে যা আমি যা করছি তা ভঙ্গ করে। * অন্তর্ভুক্ত না .এবং ..?
tkbx

11

আমার ক্ষেত্রে আমি প্রতিটি ফাইলকে তার নিজস্ব সংরক্ষণাগারে জিপ করতে চেয়েছিলাম, সুতরাং আমি নিম্নলিখিতটি (ইন zsh) করেছিলাম :

$ for file in *; do zip ${file%.*}.zip $file; done

1
এখানে কি নেই mkv? এছাড়াও এখানে কিছুই বিশেষভাবে নির্দিষ্ট নয় zsh। আপনি কোনও ফাইলের নাম সম্বলিত কোনও ভেরিয়েবলকে যথাযথভাবে উদ্ধৃত করতে চাইবেন, তাই zip "${file%.*}.zip" "$file"উভয় ভেরিয়েবলের চারপাশে ডাবল উদ্ধৃতি সহ।
ট্রিপলি

1
@tripleee প্রথমত, আমার ভ্রান্ত রেফারেন্স ইশারা জন্য ধন্যবাদ mkv। দ্বিতীয়ত, যুক্তিগুলি উদ্ধৃত করা অপ্রয়োজনীয় zsh, এর বিপরীতে নয় bash। এই কারণেই আমি উল্লেখ করেছি যে এটি একটি আদেশ ছিল zsh
রেডন রোসবারো

একটি এম্পারস্যান্ডের সাথে সর্বশেষ আধা-কোলন প্রতিস্থাপন করা এটিকে তাত্পর্যপূর্ণ করে তুলতে পারে (ডিরেক্টরিতে যদি ফাইলের সংখ্যা যুক্তিসঙ্গত হয় ...)। অন্যথায় find . -type f -maxdepth 1 -print0|xargs -r0 -n1 -P64 -I{} bash -c 'f="{}"; zip "${f%.*}.zip" "$f"'( -Pআপনার সিপিইউ থ্রেডের উপর ভিত্তি করে অ্যাডজাস্টেড দিয়ে ...) (অনেকগুলি জিএনইউ নির্ভরতা ...)
গার্ট ভ্যান ডান বার্গ

5

আর উপায় হ'ল সন্ধান এবং xargs ব্যবহার করা: (এটি জিপটিতে "।" ডিরেক্টরি অন্তর্ভুক্ত করতে পারে তবে এটি এখনও সঠিকভাবে বের করা উচিত my find . -type f -exec zip zipfile.zip {} +

( যদি আপনার সংস্করণটি এক্সিকিউটিভের জন্য শেষটি সমর্থন না করে তবে +এটি প্রতিস্থাপন করা \;যেতে পারে যদিও এটি ধীর হবে ...)find+

এটি ডিফল্টরূপে সমস্ত উপ-ডিরেক্টরি অন্তর্ভুক্ত করবে। জিএনইউতে এটি -maxdepthপ্রতিরোধ করতে পারে অনুসন্ধান করুন ।


(সমাধানগুলি ব্যবহারের বিপরীতে, এটি *ডটফাইলগুলি অন্তর্ভুক্ত করবে এবং কোনও ডিরেক্টরিতে খুব বেশি ফাইল থাকলে এটি পড়বে না)
গার্ট ভ্যান ডান বার্গ ১

1

এটি করার জন্য আরেকটি (ধীর) পদ্ধতি (যা একবারে জিপটিতে একটি ফাইল যুক্ত করে):

for f in * .[^.]*; do
    [ -r "$f" ] || continue # Skip directories or non-existant files (Probably ".[^.]*" if directory has no dotfiles). Using -e will allow directories to be used as well
    zip zipfile.zip "$f" # If directories are included, you probably want to add -r
done

এতে ডটফাইল ইস্যু রয়েছে *( ওয়ার্কআরাউন্ড যুক্ত) এবং এটি সংরক্ষণাগারে যুক্ত করে প্রতিটি ফাইলের জন্য একবার জিপ শুরু করা হবে। ইন bash, এটা ফাইল একটি বৃহৎ পরিমাণ সাথে মোকাবিলা করবে।

এটি অন্যান্য পদ্ধতির বেশিরভাগের তুলনায় ধীর হবে তবে তুলনামূলকভাবে সহজ।


1
আমি বলব এটি গৃহীত উত্তরের চেয়ে কম সহজ এবং ধীর, যা এই প্রশ্নটিকে জিজ্ঞাসা করে: "কেন কেউ এই কাজ করবে?"। আপনি যদি এই প্রশ্নের উত্তর দিতে পারেন তবে আমি আপনাকে সেই প্রসঙ্গে আপনার উত্তরটিতে রাখার পরামর্শ দিই, নইলে আমি মনে করি এটি পুরানো প্রশ্নের খারাপ উত্তর যা ইতিমধ্যে ভাল উত্তর পেয়েছে।
সেন্টিমানে

@ সেন্টিনিম্যান: আমি সীমাবদ্ধতাগুলি নোট করছি। আমি মনে করি এটির শিক্ষাগত মূল্য রয়েছে। (ডিরেক্টরি বাদ না দিলে এটি বেশ সহজ)। আপনি যদি এর পরিবর্তে (মানক) বাহ্যিক সরঞ্জাম ব্যবহার করে আরও দ্রুত উত্তর চান তবে আমার অন্য উত্তরটি সেটিকে কভার করে। (ডটফিলগুলি হ্যান্ডলিং অপসারণের সাথে (যা তাদের প্রশ্নের অনুপস্থিতি ছাড়াই নির্ভুলতার উপর প্রভাব ফেলে), আমি এটি বেশ মার্জিত বলে মনে করি):for f in *; do zip zip.zip "$f"; done
গার্ট ভ্যান ডান বার্গ

1
মনে রাখবেন যে গৃহীত উত্তরটি বাহ্যিক কমান্ড ব্যবহার করে না এবং এটি আরও দ্রুত হবে। কোন পরিস্থিতিতে এই উত্তরটি কার্যকর হবে?
সেন্টটিম্যান

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