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

Tre*_*iño 112 package-management apt software-sources

当我添加一个 PPA 并且我想安装它的一些内容时,使用apt-get update.

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

fun*_*orn 89

是的,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
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将以下内容附加到 ~/.bashrc

    if [ -f $HOME/.bash_funcs ]; then
    .  $HOME/.bash_funcs
    fi
    
    Run Code Online (Sandbox Code Playgroud)
  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
    
    Run Code Online (Sandbox Code Playgroud)
  4. 然后源文件

    . ~/.bashrc
    . ~/.bash_completion
    
    Run Code Online (Sandbox Code Playgroud)
  5. 完成并开始点火

    update-repo <tab> <tab>
    
    Run Code Online (Sandbox Code Playgroud)

您可以使用 bash-completion 实现更新单个 ppa 存储库,而无需更新整个 apt 源。

  • 你应该打包这个。 (18认同)
  • 您确定自动完成脚本正在工作吗? (3认同)
  • 仅供参考:我已经使用从这篇文章中获得的知识提出了一个选项来添加-apt-repository 来自动执行此操作。https://code.launchpad.net/~evarlast/software-properties/support-update/+merge/260640 (2认同)
  • @CiprianTomoiaga 它合并了,但来源在这里:http://bazaar.launchpad.net/~evarlast/software-properties/support-update/revision/932 我希望它会很狡猾。 (2认同)

enz*_*tib 46

如果存储库配置在目录中的特定文件中/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"
Run Code Online (Sandbox Code Playgroud)

尽管如此,这不是很方便。
这可以简化定义一个 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"
}
Run Code Online (Sandbox Code Playgroud)

这样你就可以简单地运行

update_repo myrepo
Run Code Online (Sandbox Code Playgroud)


Ali*_*rei 12

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

例如:

sudo update-ppa ppa:nilarimogard/webupd8
Run Code Online (Sandbox Code Playgroud)

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

有关 Y PPA 经理的更多信息,请点击此处

  • `sudo add-apt-repository ppa:webupd8team/y-ppa-manager` 然后是 `sudo apt-get update` 最后是 `sudo apt-get install y-ppa-manager` (6认同)

ken*_*orb 9

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

apt-get update -o Dir::Etc::sourcelist=/path/to/repo.list
Run Code Online (Sandbox Code Playgroud)

这是一个单行更新最近添加的 apt 存储库

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

这比更新所有存储库要快得多,尤其是在添加新存储库后进行 VM 配置期间。

  • 我认为这更新了`/path/to`中的所有内容 (3认同)

wis*_*cky 5

-u选项是在 15.10 中添加的。从 15.10 到 17.10,您可以-u仅自动更新您要添加的特定存储库:

add-apt-repository -u my-ppa

愚蠢的是,这个选项直到 18.04 才添加到(不过,man它已记录在 中)。add-apt-repository --help但在 18.04 中,这个功能被删除了!(同样,不在 中man,但您可以在 中看到add-apt-repository --help)。

在 18.04 中,更新功能更改为始终apt-get updateadd-apt-repository. 该-u选项已被有效删除。它保留在旧语法中,但始终设置为options.update = False. 在 18.04 中,您确实可以选择-n, --no-update,这与旧行为类似。但要么全有,要么全无,自 18.04 以来,您无法更新单个存储库。