นี่เป็นคำตอบที่ดี แต่ฉันพบสถานการณ์ที่ฉันไม่ต้องการ "ทำเครื่องหมาย" แพ็คเกจจำนวนมาก (แล้วยกเลิกการทำเครื่องหมายหลังจากautoremove
)
เมื่อรายการแพคเกจที่คุณต้องการ autoremove ถูกกำหนดอย่างง่ายดายคุณสามารถไปที่ /sed
/ xargs
ออกได้
ฉันไม่มีตัวอย่างที่ซับซ้อนของแพ็คเกจจำนวนมาก แต่ถ้าฉันมีสถานการณ์ต่อไปนี้:
root@fptc-rsvrd:~# apt-get autoremove
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be REMOVED:
libluajit-5.1-2 libluajit-5.1-common linux-headers-4.4.0-141 linux-headers-4.4.0-141-generic linux-headers-4.4.0-143 linux-headers-4.4.0-143-generic linux-headers-4.4.0-146 linux-headers-4.4.0-146-generic
linux-image-4.4.0-141-generic linux-image-4.4.0-143-generic linux-image-4.4.0-146-generic linux-image-extra-4.4.0-141-generic linux-modules-4.4.0-143-generic linux-modules-4.4.0-146-generic
linux-modules-extra-4.4.0-143-generic linux-modules-extra-4.4.0-146-generic linux-signed-image-4.4.0-141-generic pandoc-data
0 upgraded, 0 newly installed, 18 to remove and 19 not upgraded.
After this operation, 907 MB disk space will be freed.
และฉันต้องการที่จะลบเฉพาะlinux*
แพ็คเกจฉันสามารถทำได้:
root@fptc-rsvrd:~# apt-get autoremove -s | sed -ne 's/Remv \(linux[^[]*\)\[.*/\1/gp'
linux-headers-4.4.0-141-generic
linux-headers-4.4.0-141
linux-headers-4.4.0-143-generic
linux-headers-4.4.0-143
linux-headers-4.4.0-146-generic
linux-headers-4.4.0-146
linux-signed-image-4.4.0-141-generic
linux-image-extra-4.4.0-141-generic
linux-image-4.4.0-141-generic
linux-modules-extra-4.4.0-143-generic
linux-image-4.4.0-143-generic
linux-modules-extra-4.4.0-146-generic
linux-image-4.4.0-146-generic
linux-modules-4.4.0-143-generic
linux-modules-4.4.0-146-generic
ดังนั้นจากที่นี่มันง่ายที่จะผ่านสิ่งเหล่านี้ผ่านxargs
เป็นอาร์กิวเมนต์บรรทัดคำสั่งไปที่ง่าย ๆapt-get remove -y
:
apt-get autoremove -s \
| sed -ne 's/Remv \(linux[^[]*\)\[.*/\1/gp' \
| xargs apt-get remove -y
ปกติเมื่อใช้งาน xargs
ฉันจะป้องกันช่องว่างในอาร์กิวเมนต์ (เช่นfind ... -print0 | xargs -0 ...
) แต่เนื่องจากชื่อแพ็คเกจไม่มีช่องว่างฉันจึงใช้อาร์กิวเมนต์ที่คั่นด้วย newline
(ฉันคิดว่ามันเป็นสถานการณ์อื่นมันควรจะเหมาะสมกว่าที่จะ "ทำเครื่องหมาย" การถือครองการแบ่งบรรจุภัณฑ์ซึ่งสามารถทำได้ด้วย regexes และxargs
แต่น่าจะเป็นเรื่องของวิศวกรรมมากไป)