撤消 apt-get remove --purge

撤消 apt-get remove --purge

我想重新安装 Python 并运行sudo apt-get remove --purge python。显然它几乎毁掉了我系统中安装的所有东西。

看着这些,history.log我想我可以再次手动安装这些软件包,但是它们有数百个,我不能只是复制粘贴。

讽刺的是,python 仍然安装着。我能用它执行一些替换正则表达式来修复这个烂摊子吗?或者用 bash。

答案1

首先,我sudo apt-get install ubuntu-desktop按照评论中的方法运行,然后我复制了/var/log/apt/history.log有关清除操作的部分,并在其上运行了我编写的以下 Python 脚本。可能更精通正则表达式的人看到我的做法会哭,但对我来说,它确实有效:

import re

f = open('remove.log', 'r')
s = ""
for i in f:
    s += i + '\n'

s = re.sub(':.*?', '', s)
s = re.sub(r'\([^)]*\)', '', s)
s = re.sub(',', '', s)
s = re.sub('amd64', '', s)

f = open('replaced.txt', 'w')
f.write(s)

然后我可以看到一个Install块并Purge阻止replaced.txt,所以我只会sudo apt-get install在第一个块中看到所有包,然后在第二个块中看到所有包。

显然,这就是事实。

答案2

我遇到了类似的问题。@dabadaba 的脚本运行良好,但我发现手动安装每个包有点繁琐。

replaced.txt下面是我编写的一个 Python 脚本,用于自动安装@dabadaba 的答案中创建的文件中列出的软件包

import subprocess

f = open('replaced.txt', 'r')

for line in f:
    if line.startswith('Install') or line.startswith('Purge'):
        packages = line.split()
        for i in range(1, len(packages)):
            print 'Do you want to install ' + packages[i] + '? [y/n]'
            input = raw_input()
            if input == 'y':
                print 'beginning install'
                p = subprocess.Popen('apt-get install ' + packages[i], shell=True)
                p.wait()
            else:
                print 'not installing'

相关内容