जबकि 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 perl
use 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 python
import 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))
locate
आदेश ठीक है, बस locatedb पहले अद्यतन करते हैं, आदेश का उपयोगupdatedb