जबकि find
कमांड डायरेक्टरी ट्री को पुनरावर्ती रूप से पार करने का सबसे सरल तरीका है, अन्य तरीके हैं और विशेष रूप से उबंटू के साथ आने वाली दो स्क्रिप्टिंग भाषाएं पहले से ही ऐसा करने की क्षमता रखती हैं ।
बैश
bash
एक बहुत अच्छा है globstar
शेल विकल्प, जो निर्देशिका पेड़ के पुनरावर्ती ट्रैवर्सल के लिए अनुमति देता है । हम सब करने की जरूरत है कि क्या आइटम में के लिए परीक्षण है ./**/*
विस्तार एक फ़ाइल है और क्या इसमें वांछित पाठ है:
bash-4.3$ for f in ./**/* ;do [ -f "$f" ] && [[ "$f" =~ "postgis-2.0.0" ]] && echo "$f"; done ./testdir/texts/postgis-2.0.0
पर्ल
पर्ल में मॉड्यूल है, जो डायरेक्टरी ट्री के रिकर्सिव ट्रैवर्सल को करने की अनुमति देता है, और सबरूटीन के माध्यम से उन पर विशिष्ट कार्रवाई करता है । एक छोटी स्क्रिप्ट के साथ, आप डायरेक्टरी ट्री को पार कर सकते हैं, उन फ़ाइलों को पुश कर सकते हैं जिनमें वांछित स्ट्रिंग सरणी में होती है, और फिर इसे इस तरह प्रिंट करें:
#!/usr/bin/env perluse strict;use warnings;use File::Find;my @wanted_files;find( sub{ -f $_ && $_ =~ $ARGV[0] && push @wanted_files,$File::Find::name }, ".");foreach(@wanted_files){ print "$_\n"}
और यह कैसे काम करता है:
$ ./find_file.pl "postgis-2.0.0" ./testdir/texts/postgis-2.0.0
अजगर
पायथन एक और स्क्रिप्टिंग भाषा है जिसका उपयोग उबंटू दुनिया में बहुत व्यापक रूप से किया जाता है । विशेष रूप से, यह है os.walk()
मॉड्यूल जो हमें उपरोक्त - ट्रैवर्स डायरेक्टरी ट्री के समान क्रिया करने और वांछित स्ट्रिंग वाली फ़ाइलों की सूची प्राप्त करने की अनुमति देता है ।
एक-लाइनर के रूप में ऐसा किया जा सकता है:
$ python -c 'import os;print([os.path.join(r,i) for r,s,f in os.walk(".") for i in f if "postgis-2.0.0" in i])' ['./testdir/texts/postgis-2.0.0']
पूरी स्क्रिप्ट ऐसी दिखेगी:
#!/usr/bin/env pythonimport os;for r,s,f in os.walk("."): for i in f: if "postgis-2.0.0" in i: print(os.path.join(r,i))