একটি হোমব্রিউ প্যাকেজ এর সমস্ত নির্ভরতা সহ আনইনস্টল / অপসারণ করুন


339

আমার একটি হোমব্রু সূত্র রয়েছে যা আমি এর সমস্ত নির্ভরতা সহ আনইনস্টল / অপসারণ করতে চাই, অন্যান্য প্যাকেজগুলির উপর নির্ভর করে এমন প্যাকেজগুলি এড়ানো যায় না ( প্যাকেজ ম্যানেজারের পার্লায়েন্সে ক্যাসকেডিং প্যাকেজ অপসারণ )।

যেমন প্যাকেজ আনইনস্টল করুন aযা প্যাকেজগুলির উপর নির্ভর করে b& cযেখানে প্যাকেজটি প্যাকেজের dউপরও নির্ভর করে c। ফলাফলটি এড়িয়ে যাওয়া aএবং উভয়ই আনইনস্টল করা উচিত ।bc

আমি এটা কিভাবে করবো?

অপ্রয়োজনীয় জাঙ্ক পিছনে না রেখে কোনও প্যাকেজ আনইনস্টল করার উপায় থাকতে হবে ।


3
এই নামটির মতো কোনও প্যাকেজ ম্যানেজারকেই কি বাক্সের বাইরে করা উচিত নয় ?! LOL
mljrg

উত্তর:


407

সম্পাদনা করুন:

দেখে মনে হচ্ছে ইস্যুটি এখন বাহ্যিক আদেশ brew rmdepsবা ডাকা ব্যবহার করে সমাধান হয়েছেbrew rmtree

ইনস্টল এবং ব্যবহার করতে, নিম্নলিখিত আদেশগুলি জারি করুন:

$ brew tap beeftornado/rmtree
$ brew rmtree <package>

আরও তথ্য এবং আলোচনার জন্য উপরের লিঙ্কটি দেখুন।


আসল উত্তর:

দেখা যাচ্ছে যে বর্তমানে এটি সম্পাদন করার সহজ কোনও উপায় নেই।

যাইহোক, আমি হোমব্রিউয়ের গিটহাব পৃষ্ঠায় একটি সমস্যা দায়ের করেছি এবং কেউ এটিকে সমাধান করার জন্য একটি এক্সক্লুসিভ কমান্ড যোগ না করা পর্যন্ত অস্থায়ী সমাধানের পরামর্শ দিয়েছে।

একটি বাহ্যিক কমান্ড বলা আছে brew leavesযা সমস্ত প্যাকেজগুলি মুদ্রণ করে যা অন্যান্য প্যাকেজের নির্ভরতা নয়।

আপনি একটি লজিক্যাল করেন তাহলে এবং আউটপুট উপর brew leavesএবং brew deps <package>, আপনি শুধু এতিম নির্ভরতা প্যাকেজ, যা আপনি নিজে পরে আনইনস্টল করতে পারেন একটি তালিকা পেতে পারেন। xargsএটির সাথে একত্রিত হোন এবং আপনার যা প্রয়োজন তা আপনি পেয়ে যাবেন, আমার ধারণা (অনির্ধারিত, এটির উপর নির্ভর করবেন না)


সম্পাদনা করুন: কারো শুধু একটি অনুরূপ সমাধান প্রস্তাব ব্যবহার joinপরিবর্তে xargs:

brew rm FORMULA
brew rm $(join <(brew leaves) <(brew deps FORMULA))

আরও তথ্যের জন্য উপরে উল্লিখিত ইস্যুতে মন্তব্য দেখুন ।


4
দ্বিতীয় লাইন একটি ত্রুটি দেয়: This command requires a keg argument
Shmidt

7
তৃতীয় পক্ষের brew rmtreeস্ক্রিপ্টটি এখন একটি brew tap beeftornado/rmtree && brew install beeftornado/rmtree/brew-rmtree
ট্যাপে

1
@ নিকোলাসমক্রিকিডি আমি চেষ্টা করেছি এবং এটি নিশ্চিত করতে পারি যে এটি আজকাল সবচেয়ে নিশ্চিত উপায়।
ওরি ব্যান্ড

1
brew rm $(join <(brew leaves) <(brew deps FORMULA))কাজটি ভাল করে সমস্ত নির্ভরতা অপসারণ না হওয়া পর্যন্ত আপনাকে বার বার এটি চালাতে হবে। এটি একবারে সবকিছু আনইনস্টল করতে পারে না কারণ নির্ভরতা একে অপরেরকে আন্তঃনির্ভর করে।
গ্রেগ ওয়াং

1
&& brew install brew-rmtreeআর প্রয়োজনীয়।
বরিস

34

এখানে লক্ষ্য হ'ল অন্য প্যাকেজের নির্ভরতা ভঙ্গ না করে প্রদত্ত প্যাকেজ এবং তার নির্ভরতাগুলি সরিয়ে ফেলা । আমি এই আদেশটি ব্যবহার করি:

brew deps [FORMULA] | xargs brew remove --ignore-dependencies && brew missing | xargs brew install

দ্রষ্টব্য: @ alphadogg এর সহায়ক মন্তব্য প্রতিবিম্বিত করতে সম্পাদিত।


--ignore-dependenciesএটি কাজ করার জন্য অপসারণ করতে যুক্ত করতে হয়েছিল।
আলফাডোগ

2
এটি আমার পাতলা কনফিগারেশনটি ভেঙে দিয়েছে, কারণ এটি অন্যান্য প্যাকেজগুলিতে ব্যবহৃত ডিপগুলি পুনরায় ইনস্টল করে না। ব্যবহার করবেন না
মার্কো প্যাপালার্ডো

25

brew rmtree এ সব কাজ করে না । এই সমস্যাটির লিঙ্কগুলি থেকে আমি rmrec পেয়েছি যা আসলে কাজ করে। দেশী brewআদেশ হিসাবে এটি কেন নেই তা knowsশ্বর জানেন ।

brew tap ggpeti/rmrec
brew rmrec pkgname

সত্যিই এটি ভালবাসুন, যদিও আপনি ইতিমধ্যে নিজেকে আনইনস্টল করার পথটি শুরু করে দিয়েছিলেন এবং অপসারণের জন্য আরও প্যাকেজ সন্ধান করতে থাকলে, আপনাকে আরও বিস্তৃত [FORMULA]স্পর্শকৃত প্যাকেজগুলি কী তা জানতে হবে, অথবা আপনি কেবল সংক্ষেপে পুনরায় ইনস্টল করতে পারেন এবং তারপর rmrec ব্যবহার করতে পারেন পুনরাবৃত্তভাবে সঠিকভাবে তার সমস্ত নির্ভরতা অপসারণ করতে।
ড্রাগন 788

2
ক্যাভ্যাট: এটি rmrecবর্তমানে উপস্থিত নেমস্পিড প্যাকেজগুলি খুব ভাল পরিচালনা করে না বলেও মনে হয়। আমি এমন কিছু ব্যবহার করছিলাম যা টেনে এনেছিল linuxbrew/xorg/xorgএবং এটি সেই প্যাকেজ ব্যতীত সমস্ত কিছু সরিয়ে ফেলেছিল এবং স্পষ্টভাবে সেই প্যাকেজটির নামকরণও এটি সমাধান করতে পারে নি এবং কিছুই করেনি।
ড্রাগন 788

নিশ্চিত করেছেন যে ব্যবহারের প্রস্তাবনাটি rmrecখারাপ। এটি নির্ভরতা একেবারেই পরিচালনা করে না।
omdv

মানে rmtree? rmrecনির্ভরতা পরিচালনা করে না।
টিম্ম্ম্ম

1
God knows why brew doesn't have this as a native command.=> কারণ মাতাল বিকাশকারীদের খারাপ মনোভাব থাকে। এমনকি লোকেরা কোনও সমস্যা খুলতে দেয় না। পরীক্ষা করে দেখুন github.com/Homebrew/brew , এটি শুধুমাত্র এখন কম 20 বিষয় আছে। এত অল্প সংখ্যক। এটা কি একটি ভাল জিনিস? না, এটা খুব খারাপ।
sgon00

15

@ জেফমারার উত্তরের উপর ভিত্তি করে (একটি মন্তব্যের চেয়েও বেশি সংশোধন প্রয়োজন)।

প্যাকেজের নির্ভরতাগুলি সরান (প্যাকেজ সরিয়ে দেয় না):

brew deps [FORMULA] | xargs brew remove --ignore-dependencies

প্যাকেজ সরান:

brew remove [FORMULA]

অনুপস্থিত গ্রন্থাগারগুলি পুনরায় ইনস্টল করুন:

brew missing | cut -d: -f2 | sort | uniq | xargs brew install

MeldMerge প্রকাশগুলিmeld আবিষ্কার করার পরে আনইনস্টল করার পরীক্ষা করা হয়েছে ।


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

13

এই উত্তরটি ব্যবহার করার জন্য আপনাকে এমন একটি ফাইল তৈরি এবং বজায় রাখতে হবে যা আপনার সিস্টেমে প্যাকেজের নামগুলি ইনস্টল করতে চান contains আপনার যদি ইতিমধ্যে না থাকে তবে নিম্নলিখিত কমান্ডটি ব্যবহার করুন এবং প্যাকেজের নামগুলি ইনস্টল করতে চান না তা মুছুন।

brew leaves > brew_packages

তারপরে আপনি নিম্নলিখিত কমান্ডটি চালিয়ে সমস্ত ইনস্টল করা, তবে অযাচিত প্যাকেজ এবং কোনও অপ্রয়োজনীয় নির্ভরতা অপসারণ করতে পারেন

brew_clean brew_packages

brew_cleanএখানে পাওয়া যায়: https://gist.github.com/cskeeters/10ff1295bca93808213d

এই স্ক্রিপ্টটি আপনি brew_packages এবং তাদের সমস্ত নির্ভরশীলতাগুলির মধ্যে উল্লিখিত সমস্ত প্যাকেজ পেয়ে যায় এবং তাদের ফলাফলের ফলাফলের সাথে তুলনা করে brew listএবং অবশেষে ব্যবহারকারীর সাথে এই তালিকাটি যাচাই করার পরে অযাচিত প্যাকেজগুলি সরিয়ে দেয়।

এই মুহুর্তে আপনি যদি প্যাকেজটি মুছে ফেলতে চান তবে আপনি aএটিকে কেবল brew_packages ফাইল থেকে সরিয়ে ফেলুন এবং আবার চালনা করুন brew_clean brew_packages। এটি অপসারণ করা হবে b, কিন্তু না c


আমি মনে করি যে এখন ব্রিউ ক্লিনটি অন্তর্নির্মিত, চেষ্টা করুনbrew clean -s
ডিভিন জি রোড

1
উপরের মন্তব্য ভুল ছিল, 5 মিনিটে সম্পাদনা বন্ধ হয়ে যায়। চেষ্টা করুনbrew cleanup -s && brew cask cleanup
ডিভিন জি রোড

5

আপনি এটির জন্য কেবল একটি ইউনিক্স পাইপ ব্যবহার করতে পারেন

brew deps [FORMULA] | xargs brew rm

12
এটি কোনও ভাল সমাধান নয়। আপনি অন্য প্যাকেজগুলির নির্ভরতা এইভাবে ভাঙ্গতে পারেন।
ওরি ব্যান্ড

12
এরপরে একটি কমান্ড রয়েছে যার পরে আপনি চালাতে পারেন আপনাকে বলার জন্য যে আপনি যদি প্রয়োজনীয় যে কোনও নির্ভরশীলতাগুলি brew missing
নির্দেশিত করেন

4

নিচের স্ক্রিপ্টটি ব্রিউ-পার্জ হিসাবে সংরক্ষণ করুন

#!/bin/bash
#:Usage: brew purge formula
#: 
#:Removes the package and all dependancies.
#: 
#: 
PKG="$1"
if [ -z "$PKG" ];then
   brew purge --help
   exit 1
fi
brew rm $PKG
[ $? -ne 0 ] && exit 1
while brew rm $(join <(brew leaves) <(brew deps $PKG)) 2>/dev/null
  do :
done
echo Package $PKG and its dependancies have been removed.
exit 0

এখন নিম্নলিখিত কমান্ড দিয়ে এটি ইনস্টল করুন

sudo install brew-purge /usr/local/bin

এখন এটি চালান

brew purge package

জিপিজি ব্যবহারের উদাহরণ

$ brew purge gpg
Uninstalling /usr/local/Cellar/gnupg/2.2.13... (134 files, 11.0MB)
Uninstalling /usr/local/Cellar/adns/1.5.1... (14 files, 597.5KB)
Uninstalling /usr/local/Cellar/gnutls/3.6.6... (1,200 files, 8.9MB)
Uninstalling /usr/local/Cellar/libgcrypt/1.8.4... (21 files, 2.6MB)
Uninstalling /usr/local/Cellar/libksba/1.3.5... (14 files, 344.2KB)
Uninstalling /usr/local/Cellar/libusb/1.0.22... (29 files, 508KB)
Uninstalling /usr/local/Cellar/npth/1.6... (11 files, 71.7KB)
Uninstalling /usr/local/Cellar/pinentry/1.1.0_1... (12 files, 263.9KB)
Uninstalling /usr/local/Cellar/libassuan/2.5.3... (16 files, 444.2KB)
Uninstalling /usr/local/Cellar/libtasn1/4.13... (59 files, 436KB)
Uninstalling /usr/local/Cellar/libunistring/0.9.10... (54 files, 4.4MB)
Uninstalling /usr/local/Cellar/nettle/3.4.1... (85 files, 2MB)
Uninstalling /usr/local/Cellar/p11-kit/0.23.15... (63 files, 2.9MB)
Uninstalling /usr/local/Cellar/gmp/6.1.2_2... (18 files, 3.1MB)
Uninstalling /usr/local/Cellar/libffi/3.2.1... (16 files, 296.8KB)
Uninstalling /usr/local/Cellar/libgpg-error/1.35... (27 files, 854.8KB)
Package gpg and its dependancies have been removed.
$ 

2

অন্যান্য উত্তরগুলি আমার পক্ষে কার্যকর হয়নি তবে এটি ( fishশেলের মধ্যে) করেছে:

brew remove <package>
for p in (brew deps <package>)
    brew remove $p
end

কারণ brew remove $pব্যর্থ হয় যখন কিছু অন্যান্য প্যাকেজ নির্ভর করে p


2

একটি আরও পূর্ণ বোর্ন শেল ফাংশন

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

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

unbrew () {
    local formula
    for formula in "$@"; do
        brew deps "$formula" |
        xargs brew uninstall --ignore-dependencies --force
        brew uninstall --force "$formula"
    done
    brew missing | cut -f2 -d: | sort -u | xargs brew install
}

এটি হোমবার্যু 1.7.4 এ পরীক্ষা করা হয়েছিল।

আদেশ সহকারে

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


1

@ জেফমারসারের উত্তরটি বর্তমান ব্রিউয়ের সাথে কাজ করতে কিছুটা পরিবর্তন করতে হবে, কারণ এর আউটপুট brew missingপরিবর্তিত হয়েছে:

brew deps [FORMULA] | xargs brew remove --ignore-dependencies && brew missing | cut -f1 -d: | xargs brew install
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.