macOS और लिनक्स
find
MacOS पर BSD का कार्यान्वयन GNU खोज से भिन्न है - यह BSD और GNU दोनों के साथ संगत है। ग्लोबिंग कार्यान्वयन के साथ प्रारंभ करें, उपयोग -name
और इसके -o
लिए या - इस फ़ंक्शन को अपनी .bashrc
फ़ाइल में रखें :
pyclean () {
find . -type f -name '*.py[co]' -delete -o -type d -name __pycache__ -delete
}
फिर cd
जिस डाइरेक्टरी को आप फिर से साफ करना चाहते हैं, उसे टाइप करें pyclean
।
GNU केवल-खोजने के लिए
यह एक GNU खोज है, केवल (यानी लिनक्स) समाधान है, लेकिन मुझे लगता है कि यह regex के साथ थोड़ा अच्छा है:
pyclean () {
find . -regex '^.*\(__pycache__\|\.py[co]\)$' -delete
}
पायथन 3 का उपयोग करते हुए कोई भी मंच
विंडोज पर, आपके पास शायद नहीं भी है find
। हालाँकि, आपके पास शायद पायथन 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
झंडा अजगर बताता है लिखने के लिए नहीं .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
निर्देशिका / tmp में या उसके नीचे कोर नाम वाली फ़ाइलें खोजें और उन्हें हटा दें, लेकिन पिछले उदाहरण की तुलना में अधिक कुशलता से (क्योंकि हम rm लॉन्च करने के लिए कांटा (2) और निष्पादन (2) का उपयोग करने की आवश्यकता से बचते हैं और हमें इसकी आवश्यकता नहीं है) अतिरिक्त xargs प्रक्रिया)।
*__pycache__
,*.pyc*
और यह फ़ाइलों और निर्देशिकाओं के बीच अंतर नहीं करता है। अधिकांश उत्पन्नrm
आदेश भी अतिरेकपूर्ण होंगे।