當前位置: 首頁>>技術教程>>正文


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/zh-tw/article/674.html,未經允許,請勿轉載。