एक और भी सामान्य संस्करण जो find
विकल्पों का उपयोग करने की अनुमति देता है :
#!/bin/bash
set -e
path="$1"
shift 1
while [[ $path != / ]];
do
find "$path" -maxdepth 1 -mindepth 1 "$@"
# Note: if you want to ignore symlinks, use "$(realpath -s "$path"/..)"
path="$(readlink -f "$path"/..)"
done
उदाहरण के लिए (स्क्रिप्ट को सहेजा गया है find_up.sh
)
find_up.sh some_dir -iname "foo*bar" -execdir pwd \;
... उन सभी के some_dir
पूर्वजों (स्वयं सहित) के नाम छापेंगे, जिनमें /
पैटर्न वाली फाइल पाई जाती है।
readlink -f
उपरोक्त स्क्रिप्ट का उपयोग करते समय रास्ते में सीमिंक्स का पालन किया जाएगा, जैसा कि टिप्पणियों में उल्लेख किया गया है। आप realpath -s
इसके बजाय उपयोग कर सकते हैं , यदि आप नाम से पथों का अनुसरण करना चाहते हैं ("/ foo / bar" "foo" तक जाएगा, भले ही "बार" एक सिम्लिंक हो) - हालाँकि जिसे स्थापित करने की आवश्यकता होती realpath
है जिसे डिफ़ॉल्ट रूप से स्थापित नहीं किया जाता है अधिकांश प्लेटफार्मों।