मैं एक निश्चित निर्देशिका में निहित सभी जावा कक्षाओं को डिकम्पाइल करने की कोशिश कर रहा हूं, जो निर्देशिका के शीर्ष पर शुरू होता है।
निर्देशिका में कई उपनिर्देशिकाएँ होती हैं और प्रत्येक की गहराई अलग-अलग होती है।
मैं जो करना चाहता हूं वह प्रत्येक डायरेक्टरी में जाता है और यदि कंटेंट प्रत्यय वाली फाइल है .class
, डिकम्पाइलर कमांड चलाएं, जो एक ही डायरेक्टरी में डिकम्पोज्ड फाइल बनाएगा।
मैंने निम्नलिखित की कोशिश की है, लेकिन जो कुछ भी मैं हूं उसके बाद वे हासिल नहीं करते हैं।
पहली विधि थी:
for dir in ./*; do ( ( if [[ -d $dir ]]; then cd "$dir"; fi ) && ( for f in "$dir"; do ( if [[ -f $f && $f == *".class"* ]]; then jad "$f"; fi ); done ) ); done
यहां समस्या यह है कि यह पुनरावर्ती नहीं है। शायद इसे इस तरह से ट्वीक किया जा सकता है कि यह पुनरावर्ती होगा?
दूसरी विधि बहुत सरल थी, लेकिन यह शीर्ष निर्देशिका में फ़ाइलों को आउटपुट करती है। हालांकि यह ठीक हो सकता है, दुर्भाग्य से, मेरे पास कक्षाएं हैं जिनके समान नाम हैं, लेकिन विभिन्न पैकेजों में, इसलिए यह समाधान या तो काम नहीं करता है:
find . -type f -name "*.class" | while read filename; do echo $filename; done
क्या इनमें से एक को प्राप्त करने के लिए ट्विक किया जा सकता है जो मुझे चाहिए? पहले आदेश को पुनरावर्ती ऑपरेशन में कैसे बदला जा सकता है?