আমি কীভাবে কোনও আরএম-আরএফ থেকে অপসারণ করা বাইটের পরিমাণ প্রতিধ্বনি করতে পারি?


1

আমার একটি নাম আছে

alias binobj="find . -iname "bin" -o -iname "obj" | xargs rm -rf"

আমার ডিস্কটি প্রায় পূর্ণ হলে আমি এটি ব্যবহার করি। এটি "বিন" এবং "আপত্তি" ফোল্ডারগুলি মুছে দেয়, বর্তমান ফোল্ডার থেকে পুনরাবৃত্তভাবে অনুসন্ধান করে searching

আমি মুছে ফেলা সমস্ত ফাইলের মোট যোগফল কীভাবে জানতে পারি তা জানতে চাই। আমি পাইপের মাধ্যমে দুটি কমান্ডের মধ্যে একটি প্রতিধ্বনি স্থাপনের দিকে নজর রেখেছি, তবে তারপরে xargsমুছে ফেলার জন্য ফাইলগুলি পাবে না।

আমি একটি ম্যাক এ আছি, তবে আমি প্যাকেজ যুক্ত করতে লজ্জা পাচ্ছি না। আমি এটি অন্য একটি ফাইলে রাখতে চাই না (এটি আমার .bash_profile), কারণ এটি আমার সমস্ত অন্যান্য ম্যাকের সাথে সিঙ্ক হয়।

উত্তর:


1

আপনি এর জন্য পুনরাবৃত্তি অনুসন্ধান করতে খুব সতর্কতা অবলম্বন করতে চাইবেন binএবং objউদাহরণস্বরূপ, আপনি ঘটনাক্রমে গুরুত্বপূর্ণ ফাইল বা ডিরেক্টরিগুলি (যেমন .../.hg/store/data/obj:) পপআপ করতে পারেন যা ভাল ধারণা নয়।

যেখানেই সম্ভব, আপনি যথাসম্ভব যথাযথ হতে চান আপনি যদি ডিরেক্টরিগুলি অপসারণের চেষ্টা করছেন, তবে নির্দিষ্ট করুন -type dযাতে আপনি দুর্ঘটনাক্রমে কোনও ফাইল / সিমিলিংক / ইত্যাদির সাথে মেলে না ...

অতিরিক্তভাবে, এটি যথেষ্ট বড় যে এটি পড়ার যোগ্যতা / রক্ষণাবেক্ষণের জন্য কার্যকারিতার একটি সেট হয়ে উপকৃত হবে।

এই ফাংশনগুলির সেট (এবং শেষ পর্যন্ত একটি পাইপলাইন যা এ্যালিজ করা যায় / কোনও ফাংশন এ দেওয়া যেতে পারে) ফাইলের পাশের সমস্ত ডিরেক্টরি binএবং objডিরেক্টরিগুলি সরিয়ে ফেলবে makefile(সমস্ত ক্ষেত্রে সংবেদনশীল)। মোট বাইটগুলি " " র মতো আউটপুট পেতে stderrলাজুক ব্যবহার করে লেখা হবেnumfmt9.1MB

function getMakefiles {
    find . -type f -iname makefile
}

function getBinObjDirsNear {
    while read NEAR; do
        find $(dirname ${NEAR}) -type d -maxdepth 1 \( -iname bin -o -iname obj \)
    done
}

function calcTotal {
    TOTAL=0
    while read ENT; do
        TOTAL=$(( TOTAL + $(du -bc ${ENT} | tail -n 1 | cut -f 1) ))
        echo ${ENT}
    done
    numfmt --to=iec --suffix=B --format="%f" ${TOTAL} >&2
}

getMakefiles | getBinObjDirsNear | calcTotal | xargs -d '\n' rm -rf

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

1

আমি ফোল্ডারগুলি সরানোর আগে আকারটি সহজেই গণনা করতে পারি:

alias binobj="du -sc bin/ obj/ | grep total ; find . -iname "bin" -o -iname "obj" | xargs rm -rf"

কমান্ডটি আপনাকে বর্তমান ডিরেক্টরি থেকে bin+ objডিরেক্টরিগুলির বাইটে যুক্ত আকারের অনুরোধ জানাবে ; তারপরে মুছে ফেলার জন্য নির্বাহ করুন।

সম্পাদনা : মন্তব্য অনুসারে: binএবং objপুনরাবৃত্তভাবে পাওয়া উচিত:

একটি মার্জিত সমাধান খুঁজে পেতে খুব বেশি সময় না লাগিয়ে, আমি প্রতিটি ডিরেক্টরি এটি অপসারণের আগে মাপে লগ করব, এবং পরিষ্কারের কাজ শেষ হওয়ার পরে তাদের গণনা করব। একটি নোংরা ওয়ান লাইনার হতে পারে:

find . -iname "bin" -o -iname "obj" | xargs -I % sh -c "du -sb % >> /tmp/delreport.log; rm -rf %"; awk '{sum+=$1} END {print sum}' /tmp/delreport.log && rm /tmp/delreport.log

  • | xargs -I % sh -c "..." : আপনাকে \% পরামিতি সহ একাধিক কমান্ড দেওয়ার অনুমতি দেয়
  • du -sb : আপনাকে রিপোজিটরির আকার লগ করবে যা সরানো হবে
  • awk '{sum+=$1} END {print sum}' : রিপোর্টের প্রথম কলামে সমস্ত আকার যোগ করুন

আমি মনে করি এটি প্রায় ভাল, তবে ডু রিকার্সিভ নয়, যা গুরুত্বপূর্ণ এটি আমার প্রকল্পগুলি ফোল্ডার থেকে আমার সমস্ত প্রকল্প পরিষ্কার করার জন্য চালনা করে।
ব্যবহারকারী 1009013

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