जब मैं उपयोग करता हूं find
, तो यह अक्सर कई तरह के परिणाम पाता है
find -name pom.xml
./projectA/pom.xml
./projectB/pom.xml
./projectC/pom.xml
मैं अक्सर केवल एक विशिष्ट परिणाम का चयन करना चाहता हूं, (उदाहरण के लिए edit ./projectB/pom.xml
)। क्या find
आउटपुट को एन्यूमरेट करने और किसी अन्य एप्लिकेशन में पास होने के लिए फ़ाइल का चयन करने का कोई तरीका है ? पसंद:
find <print line nums?> -name pom.xml
1 ./projectA/pom.xml
2 ./projectB/pom.xml
3 ./projectC/pom.xml
!! | <get 2nd entry> | xargs myEditor
?
[संपादित करें] मैं उल्लिखित कुछ समाधानों के साथ कुछ पेर्कुलियर बग में टकरा गया हूं। इसलिए मैं पुन: पेश करने के लिए चरणों की व्याख्या करना चाहूंगा:
git clone http://git.eclipse.org/gitroot/platform/eclipse.platform.swt.git
cd eclipse.platform.swt.git
<now try looking for 'pom.xml' and 'feature.xml' files>
[संपादित करें] समाधान 1 अब तक 'nl' (एन्यूमरेट आउटपुट), हेड और टेल का एक संयोजन काम करता है यदि मैं उन्हें कार्यों में संयोजित करता हूं और $ (!!) का उपयोग करता हूं।
अर्थात:
find -name pom.xml | nl #look for files, enumirate output.
#I then define a function called "nls"
nls () {
head -n $1 | tail -n 1
}
# I then type: (suppose I want to select item #2)
<my command> $(!!s 2)
# I press enter, it expands like: (suppose my command is vim)
vim $(find -name pom.xml |nls 2)
# bang, file #2 opens in vim and Bob's your uncle.
[संपादित करें] समाधान 2 "चयन" का उपयोग करने के साथ-साथ काफी अच्छी तरह से काम करता है। उदाहरण के लिए:
findexec () {
# Usage: findexec <cmd> <name/pattern>
# ex: findexec vim pom.xml
IFS=$'\n';
select file in $(find -type f -name "$2"); do
#$EDITOR "$file"
"$1" "$file"
break
done;
unset IFS
}
Your find command | head -TheNumberYouWant
अपनी आवश्यकताओं को पूरा करने? (अपनी लाइन के साथ:!! | head -2 | xargs myEditor
)