当前位置: 首页>>技术教程>>正文


apt-get仅针对特定存储库进行更新

, , ,

问题描述

当我添加一个PPA并且想要安装它的一些内容时,使用apt-get update的re-update所有我的apt列表都非常恼人。

是否可以只同步给定存储库的内容?

最佳解决办法

是的,apt-get可以做到这一点,并且可以以很好的方式实现。

  1. 追加到~/.bash_funcs

    update-repo() {
        for source in "$@"; do
            sudo apt-get update -o Dir::Etc::sourcelist="sources.list.d/${source}" \
            -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0"    
        done
    }
    
  2. 追加到~/.bashrc

    if [ -f $HOME/.bash_funcs ]; then
    .  $HOME/.bash_funcs
    fi
    
  3. 追加到~/.bash_completion

    # Debian user-defined completion                             -*- shell-script -*-
    
    _ppa_lists(){
        local cur
        _init_completion || return
    
        COMPREPLY=( $( find /etc/apt/sources.list.d/ -name "*$cur*.list" \
    -exec basename {} \; 2> /dev/null ) )
        return 0
    } &&
    complete -F _ppa_lists update-repo
    
  4. 然后源文件

    . ~/.bashrc
    . ~/.bash_completion
    
  5. 完成并开始启动它

    update-repo <tab> <tab>
    

您可以更新单个ppa存储库,而不必更新整个apt源代码,并使用bash-completion实现。

次佳解决办法

如果存储库配置在目录/etc/apt/sources.list.d/中的特定文件中,例如myrepo.list,则可以使用以下命令更新该单个存储库:

sudo apt-get update -o Dir::Etc::sourcelist="sources.list.d/myrepo.list" \
    -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0"

尽管如此,这不是很方便。这可以简化定义一个bash函数

update_repo() {
    sudo apt-get update -o Dir::Etc::sourcelist="sources.list.d/$1.list" \
        -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0"
}

这样你就可以简单地运行

update_repo myrepo

第三种解决办法

Y PPA Manager附带一个名为update-ppa的命令行工具,可让您更新单个PPA。

例如:

sudo update-ppa ppa:nilarimogard/webupd8

此外,通过Y PPA Manager添加PPA时,PPA源将自动更新(仅限于该PPA)。在未来的版本中,将会有一个GUI来手动更新单个PPA。

有关Y PPA Manager,HERE的更多信息。

第四种办法

要更新特定存储库,请使用-o,例如:

apt-get update -o Dir::Etc::sourcelist=/path/to/repo.list

这是one-liner只更新最近添加的apt存储库

find /etc/apt/sources.list.d -type f -name '*.list' -exec sudo apt-get update -o Dir::Etc::sourcelist="{}" ';'

它比更新所有存储库要快得多,特别是在添加新的VM后配置期间。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/674.html,未经允许,请勿转载。