2011-10-04 15 views
13

मैं पार्टी है, जो मैं हर समय टाइप करने के लिए नहीं करना चाहती में एक बहुत लंबे आदेश है, इसलिए मैं अपने .profile में एक उपनाम डालखोज में एक उपनाम -exec का उपयोग

alias foo='...' 

अब मैं चाहता हूँ इस उपनाम का उपयोग निष्पादित लगता है -exec

find . -exec foo '{}' \; 

लेकिन foo नहीं मिल सकता है लगता है:

खोज: foo: ऐसा कोई फ़ाइल या निर्देशिका

क्या कोई उपनाम खोजने में संभव है?

उत्तर

7

नहीं, ढूंढें आपके उपनामों के बारे में कुछ भी नहीं पता। एलियंस पर्यावरण चर की तरह नहीं हैं कि वे बाल प्रक्रियाओं द्वारा "विरासत" नहीं हैं।

आप एक ही कमांड के साथ एक खोल स्क्रिप्ट बना सकते हैं, + x अनुमतियां सेट कर सकते हैं और इसे अपने पथ में रख सकते हैं। यह खोजने के साथ काम करेगा।

0

find कमांड में उपनामों का उपयोग करने के लिए यह संभव नहीं है (या मुश्किल/त्रुटि-प्रवण)। वांछित परिणाम प्राप्त करने एक आसान तरीका एक shellscript में उर्फ ​​की सामग्री डालने और उस shellscript चलाया जाता है:

alias foo | sed "s/alias foo='//;s/'$/ \"\[email protected]\"/" > /tmp/foo 
find -exec bash /tmp/foo {} \; 

एसईडी आदेश अग्रणी alias foo=' दूर करता है और बदल देता है "[email protected]" द्वारा ' अनुगामी तर्क शामिल होंगे जो लिपि को पारित किया।

0

मैं उपयोग कर रहा हूँ ll आमतौर पर इस उदाहरण के लिए उर्फ ​​जानते हैं, लेकिन आपके द्वारा अपना उपनाम बजाय का उपयोग कर सकते है, बस अपने उपनाम (foo) के साथ निम्न पंक्ति में ll की जगह है और यह काम करना चाहिए:

find . -exec `alias ll | cut -d"'" -f2` {} \; 

अपने मामले :

find . -exec `alias foo | cut -d"'" -f2` {} \; 

नोट यह आपके उर्फ ​​उद्धृत किया गया है मान लिया गया निम्न सिंटैक्स का उपयोग कर:

alias foo='your-very-long-command' 
9

find स्वयं एलियास के बारे में कुछ भी नहीं जानता है, लेकिन आपका खोल करता है। यदि आप हाल ही में bash के पर्याप्त संस्करण का उपयोग कर रहे हैं (मुझे लगता है कि 4.0 ने इस सुविधा को जोड़ा है), तो आप कमांड लाइन में उस बिंदु पर उपनाम की शाब्दिक सामग्री डालने के लिए find . -exec ${BASH_ALIASES[foo]} {} \; का उपयोग कर सकते हैं।

0

मैं एक ही चीज़ में भाग गया और बहुत अधिक स्कीजाइडव के समाधान को लागू किया।

मैं एक bash स्क्रिप्ट निम्नलिखित सामग्री के साथ findVim.sh बुलाया बनाया:

[ [email protected]:~ ]$ cat findVim.sh                          #!/bin/bash                                                                                                                                                                  
find . -iname $1 -exec vim '{}' \; 

तो मैं जोड़ा .bashrc उपनाम के रूप में:

[ [email protected]:~ ]$ cat ~/.bashrc | grep fvim                       
alias fvim='sh ~/findVim.sh' 

अंत में, मैं स्रोत के साथ .bashrc पुनः लोड ~/.bashrc। $ fvim foo.groovy

कहानी भी शांत लंबे पढ़ भाई नहीं था:

फिर भी लम्बी कहानी कम मैं मनमाने ढंग से स्क्रिप्ट संपादित कर सकते हैं थोड़ा के साथ तेजी से फ़ाइलें।

0

आप इसके बजाय चर का उपयोग कर सकते हैं।

तो बजाय:

alias foo="echo test" 

उपयोग:

foo="echo test" 

तो, या आदेश के प्रतिस्थापन तथा eval द्वारा निष्पादित उदाहरण के लिए:

find . -type f -exec sh -c "eval $foo" \; 

या:

find . -type f -exec sh -c "echo `$foo`" \; 

यहाँ वास्तविक उदाहरण है जो सभी गैर द्विआधारी फ़ाइलें खोजने है:

IS_BINARY='import sys; sys.exit(not b"\x00" in open(sys.argv[1], "rb").read())' 
find . -type f -exec bash -c "python -c '$IS_BINARY' {} || echo {}" \; 
1

एक उपनाम जब खोज के परिणाम प्रसंस्करण बुला का एक अन्य तरीका निम्नलिखित की तरह this answer

तो

कुछ का उपयोग करना है चाहिए कार्य:

alias ll="ls -al" 
find . -type d | while read folder; do ll $folder; done