সীমিত সংখ্যক ফাইল সহ জিপ সংরক্ষণাগার


12

zipফাইল নম্বর সীমা ব্যবহার করে আমি কোন আদেশটি ব্যবহার করতে পারি ? আমার কাছে বলুন, 5000 ফাইলের একটি ফোল্ডার (কোনও সাবফোল্ডার নেই), তাই আমি একটি কমান্ড চাই যা এই নম্বরটি ভাগ করে 10 টি পৃথক zipসংরক্ষণাগার তৈরি করতে পারে , যার প্রতিটিতে 500 টিরও বেশি ফাইল থাকবে না।

আমি চাই না যে ফলস্বরূপ 10 টি zipফাইল একে অপরের সাথে সংযুক্ত থাকুক, যাতে আমি সেগুলি পৃথকভাবে খুলতে পারি এবং একই সাথে সমস্ত 10 টি খোলার প্রয়োজন হয় না।

উত্তর:


13

আপনি এটি করতে জিএনইউ সমান্তরাল ব্যবহার করতে পারেন কারণ এটি কোনও কাজের উপাদানগুলির সংখ্যা সীমিত করার পাশাপাশি একটি কাজের নম্বর প্রদান করতে পারে (একটি অনন্য জিপ সংরক্ষণাগার নামের জন্য):

$ touch $(seq 20)
$ find . ! -name "*.zip" -type f -print0 | parallel -0 -N 5 zip arch{#} {}
  adding: 1 (stored 0%)
  adding: 10 (stored 0%)
  adding: 11 (stored 0%)
  adding: 12 (stored 0%)
  adding: 13 (stored 0%)
  adding: 14 (stored 0%)
  adding: 15 (stored 0%)
  adding: 16 (stored 0%)
  adding: 17 (stored 0%)
  adding: 18 (stored 0%)
  adding: 19 (stored 0%)
  adding: 2 (stored 0%)
  adding: 20 (stored 0%)
  adding: 3 (stored 0%)
  adding: 4 (stored 0%)
  adding: 5 (stored 0%)
  adding: 6 (stored 0%)
  adding: 7 (stored 0%)
  adding: 8 (stored 0%)
  adding: 9 (stored 0%)
$ ls
1   11  13  15  17  19  20  4  6  8  arch1.zip  arch3.zip
10  12  14  16  18  2   3   5  7  9  arch2.zip  arch4.zip

বিকল্পটি -N 5সংরক্ষণাগার প্রতি ফাইলের সংখ্যা 5 এর মধ্যে সীমাবদ্ধ করে এবং তার zipজায়গায় উপস্থাপন করা হয়{}

{#}(ধারণকৃত, আবাহন সময় আপনি দ্বারা প্রতিস্থাপিত করা হবে না), কাজ সংখ্যা দ্বারা প্রতিস্থাপিত হয়, ফলে arch1.zip, arch2.zipইত্যাদি

-print0বিকল্প findএবং -0বিকল্প parallelটমটম নিশ্চিত করুন যে বিশেষ অক্ষর ফাইলের নামের সঠিকভাবে পরিচালনা করা হয় না।


আমি এই ত্রুটিটি পেয়েছি: i.imgur.com/JoyPrfY.png এই আদেশ থেকে: সন্ধান করুন *! -নাম "*। জিপ" -প্রকার-এফ-প্রিন্ট 0 | সমান্তরাল -0-এন 500 জিপ খিলান {13} {}
ব্যবহারকারী 8547

@ ব্যবহারকারী 85৪4747 যা জিএনইউ সমান্তরাল নয়, তবে সমান্তরালটি আরও সংখ্যায় অন্তর্ভুক্ত রয়েছে, আপনি সর্বশেষতম সুরক্ষা প্যাচগুলি পাওয়ার জন্য উত্স থেকে সর্বোত্তম সংকলন এবং ইনস্টল করুন। ftp.gnu.org/gnu/parallel/parallel-latest.tar.bz2
অ্যান্থন

2
@ user8547 না, খালি চালান sudo apt-get install parallel
টেরডন

2
@ 8585 কেন arch{13}? আপনার সত্যিকারের #চরিত্রটি ব্যবহার করা দরকার । আপনি কোন শেল ব্যবহার করছেন?
অ্যান্থন

2
@ 858547 না, কাজটির নাম্বারটি সেখানে রাখার জন্য সমান্তরালভাবে বলার উপায় নেই, এটি খুশি হয়ে কাজ করেছে।
অ্যান্থন

1

কেবলমাত্র শেল বিকল্প: COUNT টি ফাইলের ব্যাচগুলি প্রক্রিয়াজাতকরণ "${@:START:COUNT}"(অবস্থানগত পরামিতিগুলির পরিসীমা) এর মাধ্যমে এবং সংরক্ষণাগারটির নাম দেওয়ার জন্য shift COUNTএকটি কাউন্টার বাড়ানোর সময় c:

সেট - *
গ = 1
যখন (($ #)); করা
  যদি [$ # -ge COUNT ]; তারপর
    জিপ $ {সি}। জিপ "$ {@: 1: COUNT }"
    গ = $ ((গ + 1 টি))
    শিফট COUNT
  আর
    জিপ $ {সি}। জিপ "$ {@}"
    শিফট $ #
  ফাই
সম্পন্ন

1

গৃহীত উত্তরটি আমার পক্ষে পুরোপুরি ঠিকঠাক কাজ করেছিল। :) তবে, আপনার যদি সমান্তরালে অ্যাক্সেস না থাকে (তবে কেন কে জানে), এখানে একটি বিকল্প আমি আগে নিয়ে এসেছি:

find . ! -name '*.zip' -type f | xargs -n 500 | awk '{system("zip myarch"NR".zip "$0)}'

যা myarch1.zip, myarch2.zip, myarch3.zip, ইত্যাদি তৈরি করবে আপনি অ্যানথনের প্রস্তাবিত -0 ট্রিকটি ব্যবহার করতে চাইতে পারেন, যদি আপনার কাছে অদ্ভুত ফাইলের নাম থাকে।

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