ฉันจะกรอง“ dpkg - get-selections” ไปยังแพ็คเกจที่มีอยู่ในที่เก็บได้อย่างไร


9

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

ฉันรู้ว่าdpkg --get-selectionsสามารถให้รายการแพ็คเกจที่ติดตั้งทั้งหมดซึ่งฉันสามารถใช้dpkg --set-selectionsกับระบบเป้าหมายได้ อย่างไรก็ตามแพคเกจที่ติดตั้งบางตัวเป็นแพ็คเกจที่ฉันสร้างขึ้นเองภายในเครื่อง (โดยใช้การติดตั้งเช่นการติดตั้ง) และไม่พร้อมใช้งานจากที่เก็บ dpkg --set-selectionsกระบวนการจะล้มเหลวเมื่อมันไม่สามารถที่จะหาแพคเกจเหล่านี้ในที่เก็บ

ดังนั้นมีวิธีที่ฉันสามารถกรองรายการที่สร้างขึ้นโดยdpkg --get-selectionsเพื่อให้มีเพียงแพคเกจที่มีรุ่นที่ติดตั้งในปัจจุบันมีอยู่ในที่เก็บปัจจุบันของฉัน?

คำตอบ:


9

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

ปัญหาในที่นี้dpkgคือไม่ทราบถึงที่เก็บ แต่ติดตั้งแพ็คเกจเท่านั้น apt-cache policy $packageคุณจะพบว่าหากแพคเกจที่มีให้บริการในพื้นที่เก็บข้อมูลโดยการทำงาน ถ้าคุณเห็นพื้นที่เก็บข้อมูลในส่วนVersion Tableก็มีบริการ

แล้วเรื่องนี้ล่ะ มันช้า แต่ควรใช้งานได้:

dpkg --get-selections '*' \
  | while read line; do
    apt-cache policy $(echo "$line" | cut -f1 ) \
      | grep -q 'http://' \
      && echo "$line"
done

นี่จะแสดงความคืบหน้าและเขียนลงในไฟล์:total=$(dpkg --get-selections '*'|wc -l); i=0; dpkg --get-selections '*' | while read line; do i=$(($i+1)); apt-cache policy $(echo "$line" | cut -f1 ) | grep -q 'http://' && echo "$i/$total $line"; echo $line>>/var/tmp/dpkg-selection.list; done
rubo77

-4

ใช้คำสั่งดังต่อไปนี้

dpkg --get-selections > installed-software

มันจะสร้างไฟล์ที่เรียกว่าซอฟต์แวร์ที่ติดตั้งในไดเรกทอรีบ้านของคุณ

บนระบบใหม่

dpkg --set-selections < installed-software

สิ่งนี้จะอ่านสิ่งที่เลือกและติดตั้ง


3
ฉันไม่คิดว่าคุณอ่านคำถาม
Ryan C. Thompson
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.