มายากล Unix ลบไฟล์. pyc ทั้งหมดจากแผนผังไดเรกทอรีหรือไม่


11

มีวิธีที่รวดเร็วในการลบไฟล์. pyc ทั้งหมดจากแผนผังไดเรกทอรีหรือไม่?

คำตอบ:


28

หากคุณพบ GNU คุณก็อาจต้องการ

find <directory name> -name '*.pyc' -delete

หากคุณต้องการบางสิ่งบางอย่างแบบพกพาแล้วคุณจะดีกว่าด้วย

find <directory name> -name '*.pyc' -exec rm {} \;

ถ้าความเร็วเป็นเรื่องใหญ่และคุณมี GNU พบและ GNU xargs แล้ว

find <directory name> -name '*.pyc' -print0|xargs -0 -p <some number greater than 1> rm

สิ่งนี้ไม่น่าเป็นไปได้ที่จะทำให้คุณมีความเร็วมากขึ้นเนื่องจากคุณจะต้องรอ I / O เป็นส่วนใหญ่


สมบูรณ์แบบ ... ขอบคุณ มันเป็น xargs ที่ฉันมักจะลืม
interstar

2
ในกรณีที่ฉันมีไฟล์ที่มีช่องว่างในชื่อฉันได้กลายเป็นนิสัยของการใช้ -print0 และ "xargs -0" เสมอ
Paul Tomblin

คุณคิดถูกแล้วน่าจะคิดอย่างนั้นในตอนแรก
เซียน

4
นอกจากนี้คุณยังสามารถใช้ '-delete' โดยตรงแทน '-print0 | xargs -0 rm ' แต่นั่นเป็นความจริงที่ตัวเลือกนี้ไม่ปรากฏใน 'find' ทุกรุ่น
rolaf

6

ใช้คำสั่งค้นหา:

find /path/to/start -name '*.pyc' -exec rm -f {} \;

มันช้าเกินไป การใช้ xargs นั้นเร็วกว่าหรือหากเวอร์ชันการค้นหาของคุณรองรับให้เปลี่ยน " \;" ที่ส่วนท้ายเป็น " +"
หยุดชั่วคราวจนกว่าจะมีการแจ้งให้ทราบต่อไป

1
มันอาจจะช้ากว่านิดหน่อย - มันรัน "rm" หนึ่งครั้งสำหรับแต่ละไฟล์แทนที่จะเป็น batching แต่มันเป็นวิธีที่พกพาได้ดีที่สุดในการทำ OP ไม่ได้บอกว่าเขาใช้ยูนิกซ์ชนิดใดและ Solaris พบว่ายังไม่มีคุณลักษณะ -print0
Kenster

1
+1, OP กล่าวว่า unix ไม่ใช่ linux นี่เป็นโซลูชันพกพาที่ดีที่สุด
theotherreceive

ฉันคิดว่าวิธีนี้เป็นวิธีเดียวที่อนุญาตให้ลบไฟล์จำนวนมากหากฉันไม่ผิดที่ใช้ xargs สามารถปล่อยให้บรรทัดคำสั่งยาวเกินไปข้อผิดพลาด +1 เป็นตัวเลือกของฉันมานานหลายปีเช่นกัน
drAlberT

หากคุณกำลังใช้ makefile เพื่อสร้างโครงการของคุณคุณอาจต้องการเพิ่มสิ่งนี้ในเป้าหมาย "สะอาด"
Tom Newton

1

cd ไปที่จุดเริ่มต้นของแผนผังไดเร็กทอรี:

หา -name '* .pyc' | xargs rm -f


ไม่จำเป็นต้องcdใส่ไดเรกทอรีบนสุดในfindคำสั่ง (แทนที่ "dot")
หยุดชั่วคราวจนกว่าจะมีการแจ้งให้ทราบต่อไป

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