আমি কীভাবে কোনও প্রকল্প থেকে সমস্ত .pyc ফাইলগুলি সরিয়ে ফেলব?


677

আমি মোটামুটি বড় প্রকল্পে কিছু ফাইলের নাম পরিবর্তন করেছি এবং তারা পিছনে ফেলে থাকা .pyc ফাইলগুলি সরাতে চাই। আমি বাশ স্ক্রিপ্ট চেষ্টা করেছি:

 rm -r *.pyc

কিন্তু এটি ফোল্ডারগুলির মাধ্যমে পুনরাবৃত্তি হয় না যেমনটি আমি ভেবেছিলাম। আমি কি ভুল করছি?


11
এটি কাজ করে না কারণ ইউনিক্সে, গ্লোবগুলি শেল দ্বারা প্রসারিত হয়, প্রোগ্রামটি চালিত না করে। আপনার যদি বর্তমান ডিরেক্টরিতে a.pyc এবং b.pyc থাকে এবং ডিরেক্টরি foo এবং বার থাকে তবে rm[-r, a.pyc, b.pyc] যুক্তি সহ কল ​​করা হবে।
মুহুর্তের

1
আপনি যদি নিজের কোডটি অন্য লোকের দিকে চাপ দেওয়ার বিষয়ে উদ্বিগ্ন হন তবে আপনি কেবল এটি .gitignore এ যুক্ত করতে পারেন **/*.pycতবে আপনাকে আবার এটি নিয়ে চিন্তা করতে হবে না
বুবাকাজৌবা

উত্তর:


1165
find . -name "*.pyc" -exec rm -f {} \;

384
ফাইন্ডে একটি অন্তর্নির্মিত "-সিলিট" অ্যাকশন রয়েছে, যাতে আপনি ঠিক করতে পারেনfind . -name \*.pyc -delete
ক্রিস্টোফার

51
সর্বাধিক গুরুত্বপূর্ণ বিষয়, যদি এটি কোনও ডেভ মেশিন হয় তবে আপনি পাইথন্ডডট্রয়ট্রাইবইটিসিওডি = সেট করতে পারেন এবং আপনার আর কখনও এটি করার দরকার নেই। দেখুন: এই উত্তর
mlissner

5
আপনি মূল্য উদ্ধৃতি নেই {}। যদি ঘটনাক্রমে শব্দ-বিভাজন ঘটে এবং এমন একটি অন্তর্বর্তী পথ মুছে ফেলা হয় যেটিকে আপনি খুঁজে পেয়েছেন এমন পথের খণ্ডের মতো বলা হয়ে থাকে?
রোবটিনোসিনো

20
-deletePOSIX স্পেসিফিকেশনের অংশ নয়, এবং এর সমস্ত বাস্তবায়নে গ্যারান্টিযুক্ত নয় find
চিপনার

7
আপনি যদি ভীত হন - যা ভাল হতে পারে - -Exec প্রতিধ্বনি with with দিয়ে একটি প্রথম পাস করুন, বা - আপনি যদি খুব ভয় পান - rm -i {} ব্যবহার করুন যা আপনাকে প্রতিবার জিজ্ঞাসা করে বা rm - v {} যাতে আপনি কী দেখতে পান আপনি মুছুন।
jeanM

1021

find . -name '*.pyc' -delete

অবশ্যই সহজ।


21
যদি আপনার findসমর্থন সংস্করণ -delete; এটি পসিক্স স্ট্যান্ডার্ডের অংশ নয়।
চিপনার

4
এটি .pyo ফাইল এবং __pycache__ডিরেক্টরি উপেক্ষা করে । আমার উত্তর দেখুন।
উইলফ্রেড হিউজেস 15

আমি গৃহীত উত্তর থেকে কোডটি ব্যবহার করেছি এবং এটি কার্যকর হয়েছে, তবে এই আদেশগুলি খাটো এবং সহজ
ড্যাপ

3
-name '*.py?'অন্তর্ভুক্ত করার জন্য.pyo, .pyc,...
সিডোসোর্ন

2
মেক স্যুর-ডিলিট হ'ল কমান্ডের শেষ জিনিস। আমি দুর্ঘটনাক্রমে সন্ধানের ঠিক পরে-মোছা। এটি সবকিছু মুছে ফেলে!
থিঙ্কানোথেরন

85

ডিবিয়ানের বর্তমান সংস্করণে আপনার pycleanস্ক্রিপ্ট রয়েছে যা python-minimalপ্যাকেজে রয়েছে।

ব্যবহার সহজ:

pyclean .

34
এটি লক্ষণীয় যে পাইক্লান কেবলমাত্র .pyc ফাইলগুলি মুছতে পারে বলে মনে হচ্ছে যার জন্য একটি সম্পর্কিত .py ফাইল রয়েছে (কমপক্ষে আমার সিস্টেমে - উবুন্টু ১২.১০।) এর অর্থ এটি উত্স ফাইল মুছে ফেলা হয়েছে এবং আপনি চান এমন পরিস্থিতিতে খুব কার্যকর নয় not বাকী .pyc ফাইলগুলি পরিষ্কার করতে।
টাইগারফঞ্চ

@ হোলস pyclean(এবং এখন py3clean) একটি ডেবিয়ান প্যাকেজ থেকে উত্পন্ন হয়েছে, এবং এইভাবে আরএইচইএলে নেই।
duozmo

83

আপনার যুক্ত করুন ~/.bashrc:

pyclean () {
        find . -type f -name "*.py[co]" -delete
        find . -type d -name "__pycache__" -delete
}

এটি সমস্ত .pyc এবং .pyo ফাইল এবং __pycache__ডিরেক্টরিগুলি সরিয়ে দেয় । এটিও খুব দ্রুত।

ব্যবহার সহজভাবে:

$ cd /path/to/directory
$ pyclean

find . -type d -name "__pycache__" -deleteঅনুপস্থিত পাথ সম্পর্কে প্রায়শই একটি সতর্কতা দেবে কারণ দৃশ্যত ফোল্ডারটি মোছার আগে বিষয়বস্তুগুলি কাতারে যুক্ত করা হবে। 2>/dev/nullএটি ঠিক করা উচিত।
ম্যাড পদার্থবিদ

53

আপনি যদি bash> = 4.0 (বা zsh) ব্যবহার করছেন

rm **/*.pyc

নোট করুন যে তাত্ক্ষণিকভাবে প্রথম-স্তরের সাব-ডিরেক্টরিতে */*.pycসমস্ত .pycফাইল নির্বাচন করে যখন **/*.pycপুনরাবৃত্তভাবে পুরো ডিরেক্টরি ট্রিটি স্ক্যান করে। উদাহরণস্বরূপ, foo/bar/qux.pycদ্বারা মুছে ফেলা হবে rm **/*.pycকিন্তু না দ্বারা */*.pyc

গ্লোবস্টারের শেল বিকল্পগুলি সক্ষম করতে হবে। সক্ষম করতে globstar:

shopt -s globstar

এবং এর স্থিতি পরীক্ষা করতে:

shopt globstar

1
rm **/*.pycবনাম চলমান মধ্যে পার্থক্য কি rm */*.pyc? (দ্বিতীয়টি স্থানীয়ভাবে আমার জন্য কাজ করেছে বলে মনে হয়েছিল))
টেলর এডমিস্টন

1
@ টেলরএডমিস্টন গভীরতা 1 এর সমস্ত উপ-ডিরেক্টরিতে rm */*.pycসমস্ত .pycফাইল মুছে ফেলবে 1+ গভীরতার সমস্ত উপ-ডিরেক্টরিতে rm **/*.pycসমস্ত .pycফাইল মুছে ফেলবে
অ্যাডাম স্টুয়ার্ট

এইড করার জন্য ধন্যবাদ অন্যদের জন্য এই থ্রেডে হোঁচট খাচ্ছে, আমি যে সমস্যার মুখোমুখি হচ্ছি তা হ'ল অ্যাপল ব্যাশটি ওএস এক্সের সাথে প্রেরণ করা গ্লোবস্টারের অন্তর্ভুক্ত নয় (সুতরাং পরিবর্তে যখন চালানো এবং ত্রুটি ছুঁড়ে মারার **মতো কাজ করে )। *shopt globstar
টেলর এডমিস্টন

30

আমি তার জন্য একটি উপনাম ব্যবহার করতাম:

$ which pycclean

pycclean is aliased to `find . -name "*.pyc" | xargs -I {} rm -v "{}"'

12
বর্তমান ডিবিয়ানে এটি পাইক্লান।
জেবি।

7
এটি ফাইলের নামগুলিতে হোয়াইটস্পেসের সাথে ভাল ব্যবহার করে না। আপনার ব্যবহার করা উচিত find -print0এবং xargs -0পরিবর্তে।
r3m0t

2
আপনি কেন ফাইল / ফোল্ডারের নাম ফাঁকা করে পাইথন কোড রাখতে চান? এটা কি সিনট্যাক্টিক্যালি আইনী?
coredumperror

@ কোরডাম্পরর, হ্যাঁ, উইন্ডোজ পাইথন আসলে স্পেস ("প্রোগ্রাম ফাইলস") সহ একটি ডিরেক্টরি ইনস্টল করে।
পল ড্রাগার

পাইথন ইন্টারপ্রেটার ডিফল্টরূপে ইনস্টল পারে, কিন্তু এটা কমই একটি ভাল জায়গা আপনার লাগাতে এর কোড । এছাড়াও, আপনি অবশ্যই চাইবেন না যে প্রোগ্রাম ফাইল ফোল্ডারটি আপনার প্যাকেজ কাঠামোর অংশ হয়ে উঠুক, যার কারণে আমি সিনট্যাক্স সম্পর্কে সতর্ক ছিলাম।
coredumperror

24

উইন্ডোজ ব্যবহারকারীদের জন্য:

del /S *.pyc

এটি একটি ব্যাচের স্ক্রিপ্টে রাখা জিনিসগুলি অতি সহজ করে তোলে। ধন্যবাদ।
নিক গটচ

এবং আপনি যদি পাওয়ারশেলটিতে থাকেন তবে এটি "সেমিডি" -> রান কমান্ড -> "প্রস্থান" এর সাথে ব্যবহার করা যেতে পারে।
np8

18
find . -name '*.pyc' -print0 | xargs -0 rm

অনুসন্ধানটি পুনরাবৃত্তভাবে * .pyc ফাইলগুলির সন্ধান করে। Xargs নামের তালিকাটি নিয়ে এটি আরএম এ প্রেরণ করে। -প্রিন্ট0 এবং -0 দুটি কমান্ডকে নাল অক্ষর সহ ফাইলের নাম আলাদা করতে বলে। এটি এটিকে শূন্যস্থানযুক্ত ফাইলের নাম এবং এমনকি একটি নতুন লাইনযুক্ত ফাইলের নামের উপরে সঠিকভাবে কাজ করতে দেয়।

এক্সেক সহ সমাধানটি কাজ করে, তবে এটি প্রতিটি ফাইলের জন্য আরএমের একটি নতুন অনুলিপি তৈরি করে। একটি ধীর সিস্টেমে বা দুর্দান্ত অনেকগুলি ফাইল সহ, এতে খুব বেশি সময় লাগবে।

আপনি আরও কয়েকটা যুক্তি যুক্ত করতে পারেন:

find . -iname '*.pyc' -print0 | xargs -0 --no-run-if-empty  rm

iname কেস সংবেদনশীলতা যুক্ত করে, * * পিওয়াইসি এর মতো। যদি আপনার এই ধরণের ফাইল না থাকে তবে রান-ইফ-খালি আপনাকে আরএম থেকে ত্রুটি পেতে বাধা দেয়।


16
$ find . -name '*.pyc' -delete

এটি তুলনায় দ্রুত

$ find . -name "*.pyc" -exec rm -rf {} \;

11

তদতিরিক্ত, লোকেরা বর্তমান ডিরেক্টরিতে পুনরাবৃত্তভাবে সমস্ত *.pyc, *.pyoফাইল এবং __pycache__ডিরেক্টরিগুলি সরাতে চায় ।

COMMAND:

find . | grep -E "(__pycache__|\.pyc|\.pyo$)" | xargs rm -rf

এটি একটি ভাল উত্তর, তবে একটি সরল পাইথন সমাধান ক্রস-প্ল্যাটফর্ম এবং সেহেতু পছন্দনীয়। যদিও ব্যক্তিগতভাবে, আমি উইন্ডোজ সম্পর্কে সম্ভবত অর্ধেক Windows এ পাইথন জনসংখ্যা জীবনের পরোয়া করি না - এবং find, grepএবং বন্ধুদের আছে কাজ করে না।
পিটারিনো

আপনি সরঞ্জামটি ইনস্টল করলে তারা তা করে। আমি প্রতিটি উইন্ডোজ সিএলআই ব্যবহারকারীকে ক্রস-
কম্প্যাটটি

8

কেবল মিশ্রণে অন্য রূপটি ছুঁড়ে ফেলার জন্য আপনি এই জাতীয় ব্যাককোটগুলিও ব্যবহার করতে পারেন:

rm `find . -name *.pyc`

5
এতে অনেকগুলি ম্যাচ হলে ব্যর্থ হওয়ার সামান্য ঘাটতি রয়েছে, কারণ এতে পাস করার জন্য অনেকগুলি আর্গুমেন্ট থাকবে rm
চিপনার


7

সম্পূর্ণ পুনরাবৃত্তি

ll **/**/*.pyc
rm **/**/*.pyc

আকর্ষণীয়, এটি কীভাবে অ্যান্ডি এবং বিলের উত্তরগুলির সাথে তুলনা করে?
অস্টিন হেনলি 21

3
এর একটি সেট **অপ্রয়োজনীয়, এবং d0kএর উত্তরের হিসাবে, আপনার প্রয়োজন অনুযায়ী গ্লোবস্টারটি সক্ষম করতে হবে বশ 4+ এ intended অর্থাত্ shopt -s globstarআপনার সর্দিযুক্ত বাশের একটিতে তা করুন বা রাখুন। নথি পত্র.
মনিকা পুনরায় ইনস্টল করুন

1
এছাড়াও llসাধারণত এর মতো কিছুতে এলিয়াস করা হয় ls -lতবে এটি আসলে কোনও আদেশ বা বহনযোগ্য নয়। সুতরাং, সমস্ত .pycফাইলগুলিকে পুনরাবৃত্তভাবে তালিকাবদ্ধ .করতে আপনার পরিবর্তে echo **/*.pycগ্লোবস্টারের সাথে কিছু সক্ষম করা উচিত
করুন মনিকা দয়া করে


3

আপনি যদি .pyc আর চান না তবে আপনি টার্মিনালে এই একক লাইনটি ব্যবহার করতে পারেন:

export PYTHONDONTWRITEBYTECODE=1

যদি মত বদলাও:

unset PYTHONDONTWRITEBYTECODE

2

rm -rডিরেক্টরিগুলিতে পুনরাবৃত্তি হয় তবে কেবল আপনি যে ডিরেক্টরিগুলিকে দেন rm। এটি সেই ডিরেক্টরিগুলি মুছে ফেলবে। একটি সমাধান হ'ল:

for i in $( find . -name *.pyc )
do
  rm $i
done

findবর্তমান ডিরেক্টরিতে সমস্ত * .pyc ফাইলগুলি পুনরাবৃত্তভাবে খুঁজে পাওয়া যাবে এবং forলুপটি ফাইলগুলির তালিকার মধ্য দিয়ে পুনরুক্ত হবে এবং প্রতিটি অপসারণ করবে।


এটি একটি কাজ করে যদিও আমাকে এটি একটি .sh ফাইলে রাখতে হবে এবং এটি চালাতে হবে (যা আমার পক্ষে ভাল, আমি এই কমান্ডটি একাধিকবার ব্যবহার করব)
টেফিয়ন

';' এর সাথে পৃথক করে এটিকে সমস্ত এক লাইনে রেখে দেওয়াই শেলটি চালানো উচিত I তবে আমি যখন এটি টাইপ করি, তখন বাশ কিছু শেষ করতে "সম্পন্ন" হওয়ার জন্য অপেক্ষা করে ...
ক্রিস লুটজ

এটি একটি ভয়াবহ অ্যান্টিপ্যাটার্ন (এবং খুব সাধারণ একটি, আমিও এটি অদৃশ্য হয়ে যেতে পারব): এটি ফাঁকা স্থান বা গ্লোব অক্ষরযুক্ত ফাইলের নামগুলির সাথে ভেঙে যায়। এবং এটা বিন্দু ব্যার্থ findতার সঙ্গে -execসম্পৃক্ত: find . -name '*.pyc' -exec rm {} +(সুন্দর, খাটো, নিরাপদ শক্তসমর্থ, আরও দক্ষ)।
gniourf_gniourf


1

আপনি চালাতে পারেন find . -name "*.pyc" -type f -delete

তবে সাবধানতা সহ এটি ব্যবহার করুন। find . -name "*.pyc" -type fআপনি কোন ফাইলগুলি সরিয়ে ফেলবেন তা দেখতে প্রথমে দৌড়াও।

এছাড়াও, আপনার কমান্ডের শেষ-যুক্তিটিই-ডিলেট হ'ল তা নিশ্চিত করুন। যদি আপনি এটি -name * .pyc আর্গুমেন্টের আগে রাখেন তবে এটি সবকিছু মুছে ফেলবে।


1

আপনি যদি প্রকল্প ফোল্ডার থেকে সমস্ত .pyc ফাইল মুছতে চান।

প্রথম, আপনার আছে

cd <path/to/the/folder>

তারপরে সমস্ত .pyc ফাইলটি সন্ধান করুন এবং মুছুন।

find . -name \*.pyc -delete
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.