ฉันจะรับรายการที่เก็บข้อมูลและ PPA ทั้งหมดจากบรรทัดคำสั่งไปยังสคริปต์การติดตั้งได้อย่างไร


217

ฉันรู้วิธีแสดงรายการแพ็คเกจทั้งหมดที่ติดตั้งในระบบของฉัน

แต่ฉันจะดูรายการที่เก็บข้อมูลและ PPA ทั้งหมดในสคริปต์ที่ฉันสามารถเรียกใช้บนเครื่องใหม่เพื่อจำลองการตั้งค่าพื้นที่เก็บข้อมูลรวมถึงคีย์ได้อย่างไร

ฉันรู้ว่าฉันสามารถตรวจสอบ/etc/apt/sources.listและ/etc/apt/sources.list.dแต่ฉันกำลังมองหาวิธีการสร้างสคริปต์ที่ดำเนินการapt-add-repositoryคำสั่งทั้งหมดในระบบใหม่ (ที่เรียงลำดับออกรับคีย์ทั้งหมด)

ความคิดใด ๆ

คำตอบ:


106

คุณสามารถแสดงทุกอย่างด้วย:

grep ^ /etc/apt/sources.list /etc/apt/sources.list.d/*

13
สิ่งที่เกี่ยวกับegrep -v '^#|^ *$' /etc/apt/sources.list /etc/apt/sources.list.d/*การถอดสายออกความเห็นและเส้นเปล่า?

3
คุณช่วยอธิบายการใช้^after grepin ได้grep ^ /etc/apt/sources.list /etc/apt/sources.list.d/*ไหม?

4
@ vasa1 เครื่องหมายรูปหมวก ^ และเครื่องหมายดอลลาร์เป็นตัวอักษรที่ตรงกับสตริงว่างที่จุดเริ่มต้นและจุดสิ้นสุดของบรรทัด
อยอกซ์

4
ฉันใช้ grep ^ [^ #] ... - ซ่อนแหล่งข้อมูลที่ได้รับความเห็นโดยอัตโนมัติ
Ross Aiken

12
หากคุณจะไม่กรองสิ่งใดออกไปมันจะไม่ง่ายไปหรือที่จะทำงานcat /etc/apt/sources.list /etc/apt/sources.list.d/*
jbo5112

99

ขอบคุณสำหรับคำแนะนำ ด้วยการล้างข้อมูลเล็กน้อยฉันได้สคริปต์ที่แสดง PPAs แต่ไม่ใช่ที่เก็บอื่น:

#! /bin/sh 
# listppa Script to get all the PPA installed on a system ready to share for reininstall
for APT in `find /etc/apt/ -name \*.list`; do
    grep -o "^deb http://ppa.launchpad.net/[a-z0-9\-]\+/[a-z0-9\-]\+" $APT | while read ENTRY ; do
        USER=`echo $ENTRY | cut -d/ -f4`
        PPA=`echo $ENTRY | cut -d/ -f5`
        echo sudo apt-add-repository ppa:$USER/$PPA
    done
done

เมื่อคุณโทรหาพร้อมlistppa > installppa.shรับสคริปต์คุณสามารถคัดลอกบนเครื่องใหม่เพื่อติดตั้ง PPA ใหม่ทั้งหมด

หยุดถัดไป: ทำสิ่งนั้นกับที่เก็บอื่น:

#! /bin/sh
# Script to get all the PPA installed on a system
for APT in `find /etc/apt/ -name \*.list`; do
    grep -Po "(?<=^deb\s).*?(?=#|$)" $APT | while read ENTRY ; do
        HOST=`echo $ENTRY | cut -d/ -f3`
        USER=`echo $ENTRY | cut -d/ -f4`
        PPA=`echo $ENTRY | cut -d/ -f5`
        #echo sudo apt-add-repository ppa:$USER/$PPA
        if [ "ppa.launchpad.net" = "$HOST" ]; then
            echo sudo apt-add-repository ppa:$USER/$PPA
        else
            echo sudo apt-add-repository \'${ENTRY}\'
        fi
    done
done

สิ่งนี้ควรทำเคล็ดลับ ฉันต้องการคำถามเกี่ยวกับ superuserเพื่อหา regex ที่ถูกต้อง


1
ในของคุณgrep -oตัวอย่างเช่น\` ใน[a-z0-9\-]ไม่ได้ทำในสิ่งที่คุณคาดหวัง มันตรงกับแบ็กสแลชตามตัวอักษรจริงๆ คุณไม่จำเป็นต้องหลบหนี-เมื่อมันเป็นที่เริ่มต้นหรือจุดสิ้นสุดของ[]รายการ; ที่จริงแล้วคุณไม่สามารถหลบหนีได้! .. ในกรณีนี้\`(อาจ) จะไม่ทำให้เกิดปัญหาเพราะคุณ (หวังว่า) จะไม่พบแบ็กสแลชในdebรายการ
Peter.O

2
โปรดทราบว่าชื่อ PPA อาจมีจุดดังนั้นฉันคิดว่าคุณต้องการเปลี่ยน regexp ของคุณเป็นhttp://ppa.launchpad.net/[a-z0-9-]\+/[a-z0-9.-]\+
kynan

ไม่คุณต้องการเปลี่ยน regex [[:graph:]] เป็น[a-z...blah.anything]เพราะจะตรงกับตัวอักษรและตัวเลขเครื่องหมายวรรคตอน + ใด ๆ - นั่นคือสิ่งที่ชื่อ PPA ประกอบด้วย
MichalH

ฉันคิดว่าคุณควรรวมdebคำในจุดเริ่มต้นของแต่ละบรรทัดที่เก็บถ้าไม่ได้รับในppa:$USER/$PPAรูปแบบ
jarno

@stwissel เหตุผลใด ๆ ที่คุณใช้ค้นหาแล้ว grep? คุณสามารถทำ glob ได้อย่างง่ายดายโดยที่เชลล์แยกวิเคราะห์และส่งไปยัง grep grep -Po "(?<=^deb\s).*?(?=#|$)" /etc/apt/{sources.list,sources.list.d/*.list} | while read ENTRY ; do echo $ENTRY; doneโปรดทราบว่าตามที่เขียนไว้นี้จะแสดงชื่อไฟล์ที่คุณป้อนแต่ละรายการมาจากดังนั้นคุณต้องทำการตัดแต่งจากจุดเริ่มต้นของผลลัพธ์ไปยังเครื่องหมายโคลอนแรก แต่ไม่ยากเกินไปสำหรับการตัด คุณอาจต้องการผ่านมันuniqหากคุณไม่ต้องการหลายรายการสำหรับแหล่งเดียวกัน (เช่นถ้าคุณติดตั้ง Google Chrome Stable / Beta / Dev)
dragon788

23

ฉันประหลาดใจที่วิธีที่ง่ายที่สุด แต่มีประสิทธิภาพมากที่สุดในการรับแหล่งซอฟต์แวร์ไบนารีที่เปิดใช้งานทั้งหมดพร้อมกับไฟล์ที่ระบุไว้ยังไม่ได้โพสต์:

grep -r --include '*.list' '^deb ' /etc/apt/sources.list /etc/apt/sources.list.d/

debจากไฟล์ประมวลผลทั้งหมดนี้จะพิมพ์ทุกบรรทัดที่เริ่มต้นด้วย สิ่งนี้ไม่รวมบรรทัดที่คอมเม้นต์รวมถึงdeb-srcบรรทัดเพื่อเปิดใช้ที่เก็บซอร์สโค้ด

มันค้นหาเฉพาะ*.listไฟล์ทั้งหมดที่จะถูกแยกวิเคราะห์aptแต่เช่นไม่มี*.list.saveไฟล์ที่ใช้สำหรับการสำรองข้อมูลหรืออื่น ๆ ที่มีชื่อผิดกฎหมาย


หากคุณต้องการสั้นลง แต่อาจเป็นเพียง 99.9% ของทุกกรณีผลลัพธ์ที่ถูกต้องที่อาจค้นหาไฟล์มากเกินไป (รวมถึง/etc/apt/sources.list*ไฟล์และไดเรกทอรีทั้งหมดไม่เพียง แต่/etc/apt/sources.listและ `/etc/apt/sources.list.d/*) คุณยังสามารถ ใช้สิ่งนี้:

grep -r --include '*.list' '^deb ' /etc/apt/sources.list*

หากไม่มีไฟล์ที่ไม่ควรอยู่ที่นั่นเอาต์พุตจะเหมือนกัน


ตัวอย่างผลลัพธ์ในเครื่องของฉันจะเป็นเช่นนี้:

/etc/apt/sources.list:deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily main restricted
/etc/apt/sources.list:deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily-updates main restricted
/etc/apt/sources.list:deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily universe
/etc/apt/sources.list:deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily-updates universe
/etc/apt/sources.list:deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily multiverse
/etc/apt/sources.list:deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily-updates multiverse
/etc/apt/sources.list:deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily-backports main restricted universe multiverse
/etc/apt/sources.list:deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily-security main restricted
/etc/apt/sources.list:deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily-security universe
/etc/apt/sources.list:deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily-security multiverse
/etc/apt/sources.list:deb http://archive.canonical.com/ubuntu wily partner
/etc/apt/sources.list.d/maarten-fonville-ubuntu-ppa-wily.list:deb http://ppa.launchpad.net/maarten-fonville/ppa/ubuntu wily main
/etc/apt/sources.list.d/webupd8team-ubuntu-tor-browser-wily.list:deb http://ppa.launchpad.net/webupd8team/tor-browser/ubuntu wily main
/etc/apt/sources.list.d/fossfreedom-ubuntu-indicator-sysmonitor-wily.list:deb http://ppa.launchpad.net/fossfreedom/indicator-sysmonitor/ubuntu wily main
/etc/apt/sources.list.d/getdeb.list:deb http://archive.getdeb.net/ubuntu wily-getdeb apps

หากคุณต้องการผลลัพธ์ที่น่าสนใจลองปล่อยมันผ่านsed:

grep -r --include '*.list' '^deb ' /etc/apt/ | sed -re 's/^\/etc\/apt\/sources\.list((\.d\/)?|(:)?)//' -e 's/(.*\.list):/\[\1\] /' -e 's/deb http:\/\/ppa.launchpad.net\/(.*?)\/ubuntu .*/ppa:\1/'

และเราจะเห็นสิ่งนี้:

deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily main restricted
deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily-updates main restricted
deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily universe
deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily-updates universe
deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily multiverse
deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily-updates multiverse
deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily-backports main restricted universe multiverse
deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily-security main restricted
deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily-security universe
deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily-security multiverse
deb http://archive.canonical.com/ubuntu wily partner
[maarten-fonville-ubuntu-ppa-wily.list] ppa:maarten-fonville/ppa
[webupd8team-ubuntu-tor-browser-wily.list] ppa:webupd8team/tor-browser
[fossfreedom-ubuntu-indicator-sysmonitor-wily.list] ppa:fossfreedom/indicator-sysmonitor
[getdeb.list] deb http://archive.getdeb.net/ubuntu wily-getdeb apps

1
ไปตามคำตอบที่ยอมรับดูเหมือนว่า OP ต้องการ PPAs ที่จะแสดงในppa:<user>/<project>แบบฟอร์ม
muru

คำถามที่ถามจะสร้างสคริปต์ที่ติดตั้ง / เปิดใช้งานที่เก็บทั้งหมด แต่ชื่อคำถามนั้นเกี่ยวกับการแสดงรายการเท่านั้น นอกจากนี้คำตอบที่ได้คะแนนสูงสุดอันดับ 2 ก็ระบุไว้เช่นกัน แต่จะแสดงมากเกินไป
ผู้บัญชาการ Byte

เยี่ยมมาก แต่ฉันได้ลงคะแนนแล้ว : D
muru

คุณสามารถใช้ตัวเลือก `-h 'สำหรับ grep เพื่อเลิกใช้ชื่อไฟล์
jarno

11

เรียกใช้คำสั่งต่อไปนี้:

apt-cache policy | grep http | awk '{print $2 $3}' | sort -u

แหล่ง


ไบโอนิคจะพิมพ์ลายเส้นเช่น ' mirror.nic.funet.fi/ubuntubionic-security/main '
jarno

1
หมายเหตุ: apt-cache policyจะแสดงเฉพาะ Repos apt-get updateหลังจากที่คุณได้ทำงาน ถ้าคุณเพิ่งเพิ่ม repo ด้วยadd-apt-repositoryมันจะไม่ปรากฏapt-cache policyจนกว่าคุณจะรันapt-get update
wisbucky

ต่อ @wiscucky: sudo apt update > /dev/null 2>&1 && sudo apt-cache policy | grep http | awk '{print $2 $3}' | sort -uทำงานได้ดี gist.github.com/bmatthewshea/229da822f1f02157bff192a2e4a8ffd1
bshea

4

ฉันใช้คำสั่งนี้เพื่อแสดงรายการแหล่งซอฟต์แวร์ที่กำหนดค่าไว้ทั้งหมด (ที่เก็บข้อมูล) รวมถึงแหล่งที่ถูกปิดใช้งานในปัจจุบัน :

cat /etc/apt/sources.list; for X in /etc/apt/sources.list.d/*; do echo; echo; echo "** $X:"; echo; cat $X; done

ฉันใช้สิ่งนี้เป็นหลักในการแก้ไขปัญหา สิ่งนี้สามารถรวมเข้ากับสคริปต์ได้อย่างแน่นอน แต่คุณอาจต้อง จำกัด/etc/apt/sources.list.d/*ให้แคบลง/etc/apt/sources.list.d/*.listดังนั้นคุณจะได้รับแหล่งซอฟต์แวร์ที่เปิดใช้งานในปัจจุบันเท่านั้น


ขอบคุณสำหรับความคิดเห็น cat แสดงไฟล์ตามที่เป็นดังนั้นฉันจะต้องแก้ไขด้วยตนเองเพื่อสร้างสคริปต์ (ตามที่ระบุไว้ในคำถาม) ความท้าทายเกี่ยวกับที่เก็บ: หากคุณเพียงคัดลอกไฟล์จาก / etc / apt คุณจะไม่ได้รับที่เก็บคีย์ นี่คือเหตุผลที่ฉันต้องการสคริปต์ที่ดึงข้อมูลมาให้เรา
stwissel

2

AptPkg::Classดังนั้นการทำบางขุดเรามี

ดังนั้นการใช้perlเราสามารถทำสิ่งที่ง่ายเช่นนี้ ..

perl -MAptPkg::Cache -MData::Dumper -E'say Dumper [AptPkg::Cache->new->files()]' | less

นี่ทำให้เราได้รายการAptPkg::Class::PkgFileแพ็คเกจทั้งหมด คุณอาจสร้างapt-add-repositoryคำสั่งด้วยสิ่งนั้น


2

https://repogen.simplylinux.ch/จะให้รายการ PPA ทั้งหมดสำหรับ Ubuntu ของคุณ นี่คือรายการที่สร้างโดยไม่มีไฟล์ต้นฉบับและไม่มีเครื่องพิมพ์ซัมซุง ppa:

#------------------------------------------------------------------------------#
#                            OFFICIAL UBUNTU REPOS                             #
#------------------------------------------------------------------------------#


###### Ubuntu Main Repos
deb http://us.archive.ubuntu.com/ubuntu/ yakkety main restricted universe multiverse 

###### Ubuntu Update Repos
deb http://us.archive.ubuntu.com/ubuntu/ yakkety-security main restricted universe multiverse 
deb http://us.archive.ubuntu.com/ubuntu/ yakkety-updates main restricted universe multiverse 
deb http://us.archive.ubuntu.com/ubuntu/ yakkety-proposed main restricted universe multiverse 
deb http://us.archive.ubuntu.com/ubuntu/ yakkety-backports main restricted universe multiverse 

###### Ubuntu Partner Repo
deb http://archive.canonical.com/ubuntu yakkety partner

#------------------------------------------------------------------------------#
#                           UNOFFICIAL UBUNTU REPOS                            #
#------------------------------------------------------------------------------#


###### 3rd Party Binary Repos

#### Flacon PPA - http://kde-apps.org/content/show.php?content=113388
## Run this command: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F2A61FE5
deb http://ppa.launchpad.net/flacon/ppa/ubuntu yakkety main

#### Gimp PPA - https://launchpad.net/~otto-kesselgulasch/+archive/gimp
## Run this command: sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 614C4B38
deb http://ppa.launchpad.net/otto-kesselgulasch/gimp/ubuntu yakkety main

#### Google Chrome Browser - http://www.google.com/linuxrepositories/
## Run this command: wget -q https://dl.google.com/linux/linux_signing_key.pub -O- | sudo apt-key add -
deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main

#### Google Earth - http://www.google.com/linuxrepositories/
## Run this command: wget -q https://dl.google.com/linux/linux_signing_key.pub -O- | sudo apt-key add -
deb [arch=amd64] http://dl.google.com/linux/earth/deb/ stable main

#### Highly Explosive PPA - https://launchpad.net/~dhor/+archive/myway
## Run this command: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93330B78
deb http://ppa.launchpad.net/dhor/myway/ubuntu yakkety main

#### JDownloader PPA - https://launchpad.net/~jd-team
## Run this command: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 6A68F637
deb http://ppa.launchpad.net/jd-team/jdownloader/ubuntu yakkety main

#### Lazarus - http://www.lazarus.freepascal.org/
## Run this command:  gpg --keyserver hkp://pgp.mit.edu:11371 --recv-keys 6A11800F  && gpg --export --armor 0F7992B0  | sudo apt-key add -
deb http://www.hu.freepascal.org/lazarus/ lazarus-stable universe

#### LibreOffice PPA - http://www.documentfoundation.org/download/
## Run this command: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 1378B444
deb http://ppa.launchpad.net/libreoffice/ppa/ubuntu yakkety main

#### MEGA Sync Client - https://mega.co.nz/
deb http://mega.nz/linux/MEGAsync/xUbuntu_16.10/ ./

#### MKVToolnix - http://www.bunkus.org/videotools/mkvtoolnix/
## Run this command: wget -q http://www.bunkus.org/gpg-pub-moritzbunkus.txt -O- | sudo apt-key add -
deb http://www.bunkus.org/ubuntu/yakkety/ ./

#### Mozilla Daily Build Team PPA - http://edge.launchpad.net/~ubuntu-mozilla-daily/+archive/ppa
## Run this command: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys  247510BE
deb http://ppa.launchpad.net/ubuntu-mozilla-daily/ppa/ubuntu yakkety main

#### muCommander - http://www.mucommander.com/
## Run this command: sudo wget -O - http://apt.mucommander.com/apt.key | sudo apt-key add - 
deb http://apt.mucommander.com stable main non-free contrib  

#### Opera - http://www.opera.com/
## Run this command: sudo wget -O - http://deb.opera.com/archive.key | sudo apt-key add -
deb http://deb.opera.com/opera/ stable non-free

#### Oracle Java (JDK) Installer PPA - http://www.webupd8.org/2012/01/install-oracle-java-jdk-7-in-ubuntu-via.html
## Run this command: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys EEA14886
deb http://ppa.launchpad.net/webupd8team/java/ubuntu yakkety main

#### PlayDeb - http://www.playdeb.net/
## Run this command: wget -O- http://archive.getdeb.net/getdeb-archive.key | sudo apt-key add -
deb http://archive.getdeb.net/ubuntu yakkety-getdeb games

#### SABnzbd PPA - http://sabnzbd.org/
## Run this command:  sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4BB9F05F
deb http://ppa.launchpad.net/jcfp/ppa/ubuntu yakkety main

#### SimpleScreenRecorder PPA - http://www.maartenbaert.be/simplescreenrecorder/
## Run this command: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 283EC8CD
deb http://ppa.launchpad.net/maarten-baert/simplescreenrecorder/ubuntu yakkety main

#### Steam for Linux - http://store.steampowered.com/about/
## Run this command: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F24AEA9FB05498B7
deb [arch=i386] http://repo.steampowered.com/steam/ precise steam

#### Syncthing - https://syncthing.net/
## Run this command: curl -s https://syncthing.net/release-key.txt | sudo apt-key add -
deb http://apt.syncthing.net/ syncthing release

#### Tor: anonymity online - https://www.torproject.org
## Run this command: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 886DDD89
deb http://deb.torproject.org/torproject.org yakkety main

#### Unsettings PPA - http://www.florian-diesch.de/software/unsettings/
## Run this command: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 0FEB6DD9
deb http://ppa.launchpad.net/diesch/testing/ubuntu yakkety main

#### VirtualBox - http://www.virtualbox.org
## Run this command: wget -q http://download.virtualbox.org/virtualbox/debian/oracle_vbox_2016.asc -O- | sudo apt-key add -
deb http://download.virtualbox.org/virtualbox/debian yakkety contrib

#### Webmin - http://www.webmin.com
## Run this command: wget http://www.webmin.com/jcameron-key.asc -O- | sudo apt-key add -
deb http://download.webmin.com/download/repository sarge contrib

#### WebUpd8 PPA - http://www.webupd8.org/
## Run this command: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4C9D234C
deb http://ppa.launchpad.net/nilarimogard/webupd8/ubuntu yakkety main

#### Xorg Edgers PPA - https://launchpad.net/~xorg-edgers
## Run this command: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 8844C542  
deb http://ppa.launchpad.net/xorg-edgers/ppa/ubuntu yakkety main
here is a generated list without source files and no samsung printer ppa
#### Yuuguu - http://yuuguu.com
deb http://update.yuuguu.com/repositories/apt hardy multiverse

2

นี่คือสคริปต์ " list-apt-repositories" ซึ่งแสดงรายการที่เก็บข้อมูลทั้งหมดใน " /etc/sources.list"และ" /etc/sources.list.d/*.list"คุณสามารถเพิ่ม--ppa-onlyเพื่อแสดงเฉพาะ PPA เท่านั้น PPAs จะถูกเปลี่ยนเป็นppa:USER/REPOรูปแบบโดยอัตโนมัติ

ส่วนที่เกี่ยวข้องคือ 5 บรรทัดในlist_sourcesและlist_ppaฟังก์ชั่นส่วนที่เหลือเป็นเพียงแผ่นสำเร็จรูปเพื่อห่อไว้ในเชลล์สคริปต์ที่มีประโยชน์

list-apt-repositories:

#!/bin/sh

usage () {
  cat >&2 <<USAGE
$0 [--ppa-only]

Options:
  --ppa-only            only list PPAs
USAGE
  exit $1
}

list_sources () {
  grep -E '^deb\s' /etc/apt/sources.list /etc/apt/sources.list.d/*.list |\
    cut -f2- -d: |\
    cut -f2 -d' ' |\
    sed -re 's#http://ppa\.launchpad\.net/([^/]+)/([^/]+)(.*?)$#ppa:\1/\2#g'
}

list_ppa () {
  list_sources | grep '^ppa:'
}

generate=list_sources

while test -n "$1"
do
  case "$1" in
    -h|--help) usage 1;;
    --ppa-only) generate=list_ppa;;
    *)
      printf -- "Unknown argument '$1'\n" >&2
      usage 2
    ;;
  esac
  shift
done

$generate

และในการสร้างสคริปต์การติดตั้งให้ไพพ์ลงในสคริปต์อื่น " make-apt-repository-install-script" สคริปต์ที่สร้างขึ้นรองรับ-y/ --yesอาร์กิวเมนต์สำหรับการใช้ที่ไม่ใช่แบบโต้ตอบ (ดูadd-apt-repository(1))

make-apt-repository-install-script:

#!/bin/sh

if test -n "$1"
then
  cat >&2 <<USAGE
Usage: $0 < PATH_TO_LIST_OF_REPOS
       list-apt-repositories [--ppa-only] | $0

No options recognized.

Reads list of repositories from stdin and generates a script to install them
using \`add-apt-repository(1)\`. The script is printed to stdout.

The generated script supports an optional
\`-y\` or \`--yes\` argument which causes the \`add-apt-repository\` commands
to be run with the \`--yes\` flag.
USAGE
  exit 1
fi

cat <<INSTALL_SCRIPT
#!/bin/sh
y=
case "\$1" in
  -y|--yes) y=\$1;;
  '') y=;;
  *)
    printf '%s\n' "Unknown option '\$1'" "Usage: \$0 [{-y|--yes}]" >&2
    exit 1
  ;;
esac
INSTALL_SCRIPT

xargs -d'\n' printf "add-apt-repository \$y '%s'\n"

อีกครั้งส่วนที่สำคัญคือxargsคำสั่งในบรรทัดสุดท้ายส่วนที่เหลือคือสำเร็จรูป


1

หากต้องการให้เพิ่มบรรทัด ppa.launchpad.net เป็น ppa: $ USER / $ PPA เพิ่มที่เก็บอื่นด้วยบรรทัดเต็มจากไฟล์ * .list ไม่มีสายล่อ

#! / bin / ทุบตี
# ~ / bin / mk_repositories_restore_script ของฉัน
mkdir -p ~ / bin 
x = ~ / bin / restore_repositories
echo \ # \! / bin / bash> $ x
chmod u + x $ x
(
 สำหรับ APT ในรายการ $ (ค้นหา / etc / apt / -name \ *.)
    do sed -n -e '/ ^ deb / {
     /ppa\.launchpad/s/\(.*\/\^^//**.\)\(ه^ \ t] * \) \ (. * $ \) / sudo apt-add-repository ppa : \ 2 / p;
     /ppa\.launchpad/!s / \ (deb [\ t] * \) \ (. * $ \) / sudo apt-add-repository \ 2 / p;
    } '$ APT
 เสร็จแล้ว
) | จัดเรียง | uniq | tee -a ~ / bin / restore_repositories

0

ขอบคุณ BobDodds!
หากใครสนใจฉันได้อัปเดตโค้ดของคุณเล็กน้อย (หวังว่าคุณจะไม่สนใจ) ..
สคริปต์นี้จะพิมพ์เฉพาะ PPA ที่ผู้ใช้เพิ่มเท่านั้น (/etc/apt/sources.list.d)

    #!/bin/bash
    # My ~/bin/mk_repositories_restore_script
    mkdir -p ~/bin
    x=~/bin/restore_repositories
    echo \#\!/bin/bash > $x
    chmod u+x $x
    (
    for APT in $( find /etc/apt/ -name \*.list )
    do sed -n -e '/^deb /{
          /ppa\.launchpad/s/\(.*\/\/[^\/]*.\)\([^ \t]*\)\(.*\/ubuntu.*$\)/ppa:\2/p;                                                                                                                                                                                       
        }' $APT
    done
    ) | sort | uniq | tee -a ~/bin/restore_repositories

0
sed -r -e '/^deb /!d' -e 's/^([^#]*).*/\1/' -e 's/deb http:\/\/ppa.launchpad.net\/(.+)\/ubuntu .*/ppa:\1/' -e "s/.*/sudo add-apt-repository '&'/" /etc/apt/sources.list /etc/apt/sources.list.d/*

ที่ไม่ได้สร้างคำสั่งเพื่อเปิดใช้งานแหล่งเก็บข้อมูลที่เป็นไปได้ (deb-src)


-1

ติดตั้ง ppa-purge

apt install ppa-purge

จากนั้นรับรายการ ppa ด้วยการกรอกแท็บ

ppa-purge -o(กดTabปุ่มสองครั้ง)


2
นั่นคือถอยหลัง คุณจะแนะนำให้ OP รวบรวมเอาต์พุตเชลล์ที่สมบูรณ์สำหรับการจัดเก็บหรือการประมวลผลได้อย่างไร? นอกจากนี้ppa-purgeยังไม่มี-oธงตามหน้าคู่มือของมัน -1
David Foerster
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.