osx: নির্বাচনযোগ্য ফাইল বড় সংখ্যক জিপ: - @ বিকল্প ঠিক আছে?


4

~ 500k ফাইল ধারণকারী একটি ডিরেক্টরি থেকে ~ 100k ফাইল সংরক্ষণ করার জন্য আমাকে একটি জিপ ফাইল সংরক্ষণ করতে হবে। যখন আমি সুস্পষ্ট আদেশগুলি চেষ্টা করি তখন আমি "যুক্তি তালিকাটি খুব দীর্ঘ" ত্রুটিগুলি পেতে পারি:

zip archive.zip *pattern*.txt                        # fails
zip archive.zip `find . -name "*pattern*.txt"`       # fails

এক পদ্ধতির ব্যবহার করা হয় -@ স্টেডিনের মাধ্যমে ফাইলগুলির তালিকা ফিড করার বিকল্প:

find . -name "*pattern*.txt" | zip -@ archive.zip

তবে zip মানুষ পাতা বলেছেন:

যদি ফাইল তালিকাটি যেমন - @ [MacOS এ নয়] হিসাবে উল্লেখ করা হয়, জিপ কমান্ড লাইনের পরিবর্তে মানক ইনপুট থেকে ইনপুট ফাইলগুলির তালিকা নেয়।

এটি "ম্যাকস এ নেই" যা আমাকে বিরক্ত করছে। আমি এগিয়ে গিয়েছিলাম এবং চেষ্টা -@ বিকল্প, এবং এটা কাজ বলে মনে হয়; কিন্তু আমি সত্যিই সঠিক কাজ করছে কিনা সে সম্পর্কে স্নায়বিক বোধ করছি (সমস্ত ফাইল সংরক্ষণ, অক্ষত)।

এখানে আমার প্রশ্ন:

  1. কেন -@ ম্যাকস ঠিক আছে না?
  2. সেখানে MacOS / bash / zip এর কিছু সংস্করণ আছে যেখানে এই সতর্কতা সত্য, এবং অন্যরা কোথায় না? এটি একটি অপ্রচলিত সতর্কতা, এবং যদি তাই, বিভাজক লাইন কোথায়?
  3. ব্যবহার ছাড়া এই সমস্যার জন্য একটি কার্যকর পদ্ধতির কি হবে -@?

এখানে দেওয়া সমাধান যে নোট জিপ: আর্গুমেন্ট তালিকা খুব দীর্ঘ (সামগ্রিক 80.000 ফাইল) কাজ করবে না; আমি ডিরেক্টরির মধ্যে ফাইল কিছু, সংরক্ষণাগার করা প্রয়োজন।

আমি ম্যাক অপারেটিং সিস্টেম 10.7.5 চলমান করছি। এখানে কিছু সংস্করণ তথ্য আছে:

$ bash --version
GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin11)
$ zip --version
This is Zip 3.0 (July 5th 2008), by Info-ZIP.
...
Compiled with gcc 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00) for Unix (Mac OS X) on Jun 24 2011.

উত্তর:


6

সর্বোপরি,

zip archive.zip `find . -name "*pattern*.txt"`

হয় না একটি ভাল ধারনা. ফাইলের নামগুলি স্পেস, নতুন লাইন অক্ষর, সুইচ এবং কিটোর হিসাবে ব্যাখ্যা করা যেতে পারে এমন অংশ থাকতে পারে।

প্রতিটি পাওয়া ফাইল জন্য একটি কর্ম সঞ্চালন করতে, আপনি ব্যবহার করতে পারেন -exec সুইচ বা xargs

find . -name "*pattern*.txt" -exec zip archive.zip {} +

জিপ ফাইল এক এক ফাইল এক যোগ করা হবে। এখানে, {} বর্তমানে প্রসেস করা ফাইল প্রতীক।

সমাপ্তি -exec একটি সঙ্গে যুক্তি + পরিবর্তে ; কারণগুলি একাধিক ফাইলকে একবারে প্রক্রিয়া করতে পারে (আপনি যতগুলি ত্রুটিগুলি তৈরি করছেন তা তৈরি না করেই যত তাড়াতাড়ি সম্ভব), যা প্রচুর সংখ্যক ফাইলগুলির জন্য দ্রুততর হওয়া উচিত।

find . -name "*pattern*.txt" -print0 | xargs -0 zip archive.zip

অপরিহার্যভাবে একই। xargs ডিফল্টরূপে একবারে বিভিন্ন ফাইল প্রসেস।

দ্য -print0 খুঁজে পেতে এবং সুইচ -0 Xargs এ স্যুইচ করুন ফাইল বিভাজকগুলিকে অদ্ভুত ফাইলের নামগুলির সাথে সঠিকভাবে মোকাবিলা করার জন্য নিল অক্ষরগুলি ব্যবহার করুন।

আমি জানিনা কেন -@ ম্যাক অপারেটিং সিস্টেমের জন্য সুপারিশ করা হয় না 1 , কিন্তু find ... | zip -@ ইচ্ছাশক্তি না অদ্ভুত ফাইলের নামগুলি হ্যান্ডেল করুন (বিশেষত, ফাইলের নামগুলি নতুন রেখার অক্ষর রয়েছে) সঠিকভাবে। এই অপারেটিং সিস্টেম নির্বিশেষে সত্য।


1 আমি মনন এটি কেবল সংস্করণ 9.x পর্যন্ত ম্যাক অপারেটিং সিস্টেমে প্রযোজ্য, যেহেতু ম্যাক ওএস নতুন রেখার ক্যারিয়ার আয় হিসাবে ব্যবহৃত হয় zip -@ Linefeeds আশা করি।


3

ডেনিস ঠিক ছিল, এটি একটি ওএস 9 জিনিস। জিপ 3.0 এর জন্য সোর্স কোডটি দেখেছি। মধ্যে macos/ প্ল্যাটফর্ম ডিরেক্টরি, একটি নোট যা বলে:

এই পোর্টটি ম্যাক ওএস এক্স এর আগে ম্যাক সংস্করণগুলির জন্য। ম্যাক ওএস এক্সটি ইউনিক্সে নির্মিত হয়েছে,   ম্যাক ওএস এক্স এর জন্য ইউনিক্স পোর্ট ব্যবহার করুন - 7 জুন 2008

উপরন্তু, দী zip.c ফাইল কমান্ড লাইন বিকল্প ঘোষনা wraps #ifndef MACOS। অন্য কথায়, আমি "MacOS" পোর্ট চলমান ছিল zip, দ্য -@ বিকল্প সহজভাবে ব্যর্থ হবে।

ডেনিস এছাড়াও "বিনা টাস্ক সম্পাদন করার একটি কার্যকর উপায়" উত্তর প্রদান -@ ", যথা,

find . -name "*pattern*.txt" -print0 | xargs -0 zip archive.zip

আমি সম্মত হচ্ছি যে "অদ্ভুত" ফাইলের নামগুলির (নিরাপত্তার সাথে ফাইলের নাম, নতুন লাইন ইত্যাদি) সুরক্ষিত হতে এগিয়ে যাওয়ার সর্বোত্তম উপায়। তবে, একটি কর্মক্ষমতা জরিমানা আছে। xargs কল হবে zip একাধিকবার, ফাইল নামগুলির একটি বড় সেট প্রতিটি সময় কমান্ড লাইন পরামিতি হিসাবে পাস করে। zip মধ্যে যারা ফাইল যোগ করা হবে archive.zip প্রতিটি আমন্ত্রণ উপর। কিন্তু zip কখনও বড় পড়া প্রয়োজন হবে archive.zip প্রতিটি আমন্ত্রণে, যা চাকরি অগ্রগতি হিসাবে আরো সময় লাগে।

যদি তুমি জান নিশ্চিত জন্য প্রশ্নে ফাইল নামগুলিতে কোনও প্যাথোলজিক অক্ষর নেই যেমন স্পেস বা নতুন লাইন, তারপর একক পাস

find . -name "*pattern*.txt" | zip -@ archive.zip

দ্রুত হবে; এবং এটি ওএস এক্স ঠিক সূক্ষ্ম কাজ করে, কারণ zip ওএস এক্স আসলে ইউনিক্স পোর্ট হয়। Manpage সতর্কবার্তা প্রযোজ্য নয়।


0

আপনার সংস্করণ তথ্য দেখায় হিসাবে, বেস কোড (এবং সম্ভবত এটি সম্ভবত ডকুমেন্টেশন) পুরানো, MacOS এর মধ্যে বেশ কিছুটা পরিবর্তিত হয়েছে। এছাড়াও, বিল্ডটি বেস কোডের চেয়ে অনেক নতুন, কোড / কনফিগারেশনের পরিবর্তনের পরিবর্তন হতে পারে যা এটি ডকুমেন্টেশনে কখনও তৈরি করে নি।

যেকোন ক্ষেত্রে, কমান্ডটি কাজ করে এমন আরও ভাল চেক (সম্ভবত একটি ছোট উদাহরণের সাথে), এবং এটি যে ফাইলগুলি জিজ্ঞাসা করা হয় সেগুলি সঞ্চয় করে। এটি গুরুত্বপূর্ণ হলে, র্যান্ডম ইন্টারনেট সাইটে অনুপস্থিত টুকরা সহ রঙীন স্কোয়ারগুলিতে বিশ্বাস করবেন না ...

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