macOS & Linux
find
การใช้งานของ BSD บน macOS นั้นแตกต่างจาก GNU find ซึ่งสามารถใช้งานได้กับทั้ง BSD และ GNU find เริ่มต้นด้วยการใช้งานแบบวนรอบการใช้-name
และ-o
สำหรับหรือ - ใส่ฟังก์ชันนี้ใน.bashrc
ไฟล์ของคุณ:
pyclean () {
find . -type f -name '*.py[co]' -delete -o -type d -name __pycache__ -delete
}
จากนั้นไปยังไดเรกทอรีที่คุณต้องการทำความสะอาดซ้ำและประเภทcd
pyclean
GNU ค้นหาอย่างเดียว
นี่เป็น GNU find, ทางออกเดียว (เช่น Linux) แต่ฉันรู้สึกว่ามันดีกว่ากับ regex เล็กน้อย:
pyclean () {
find . -regex '^.*\(__pycache__\|\.py[co]\)$' -delete
}
แพลตฟอร์มใดก็ได้โดยใช้ Python 3
บน Windows คุณอาจไม่มีfind
เลย อย่างไรก็ตามคุณอาจมี Python 3 ซึ่งเริ่มต้นที่ 3.4 มีpathlib
โมดูลที่สะดวก:
python3 -Bc "import pathlib; [p.unlink() for p in pathlib.Path('.').rglob('*.py[co]')]"
python3 -Bc "import pathlib; [p.rmdir() for p in pathlib.Path('.').rglob('__pycache__')]"
การ-B
ตั้งค่าสถานะบอก Python ไม่ให้เขียน.pyc
ไฟล์ (ดูเพิ่มเติมที่PYTHONDONTWRITEBYTECODE
ตัวแปรสภาพแวดล้อม)
การใช้งานที่ไม่เหมาะสมข้างต้นแสดงรายการความเข้าใจสำหรับการวนลูป แต่เมื่อใช้python -c
สไตล์จะค่อนข้างเป็นเรื่องรอง อีกวิธีหนึ่งที่เราอาจใช้ในทางที่ผิด (ตัวอย่าง) __import__
:
python3 -Bc "for p in __import__('pathlib').Path('.').rglob('*.py[co]'): p.unlink()"
python3 -Bc "for p in __import__('pathlib').Path('.').rglob('__pycache__'): p.rmdir()"
คำติชมของคำตอบ
คำตอบที่ใช้พูด:
find . | grep -E "(__pycache__|\.pyc|\.pyo$)" | xargs rm -rf
ดูเหมือนว่าจะมีประสิทธิภาพน้อยกว่าเพราะใช้สามกระบวนการ ใช้เวลาการแสดงออกปกติดังนั้นเราจึงไม่จำเป็นต้องมีการภาวนาที่แยกต่างหากจากfind
grep
ในทำนองเดียวกันมันมี-delete
ดังนั้นเราจึงไม่จำเป็นต้องมีการร้องขอแยกต่างหากrm
- และตรงกันข้ามกับความคิดเห็นที่นี่มันจะลบไดเรกทอรีที่ไม่ว่างเปล่าตราบใดที่พวกมันถูกทำให้ว่างโดยอาศัยการจับคู่นิพจน์ทั่วไป
จากxargs
หน้าคน:
find /tmp -depth -name core -type f -delete
ค้นหาไฟล์ชื่อ core ในหรือด้านล่าง directory / tmp และลบออก แต่มีประสิทธิภาพมากกว่าในตัวอย่างก่อนหน้า (เพราะเราหลีกเลี่ยงความต้องการใช้ fork (2) และ exec (2) เพื่อเรียกใช้ rm และเราไม่ต้องการ กระบวนการ xargs พิเศษ)
*__pycache__
,*.pyc*
และจะไม่เห็นความแตกต่างระหว่างไฟล์และไดเรกทอรีrm
คำสั่งที่สร้างขึ้นส่วนใหญ่จะฟุ่มเฟือย