इस, चाहे आप रिक्त स्थान या उनके नाम में अन्य विशेष वर्ण के साथ फ़ाइलों के बारे में चिंता करने की जरूरत पर निर्भर करता है हल करने के तरीकों की एक जोड़ी रहे हैं चलाने के लिए।
यदि किसी भी फ़ाइल नाम में रिक्त स्थान या विशेष वर्ण नहीं हैं (उनमें केवल अक्षरों, संख्याओं, डैश और अंडरस्कोर शामिल हैं), तो निम्न कार्य एक सरल समाधान है जो काम करेगा। आप आदेश को निष्पादित करने के लिए $(command)
का उपयोग कर सकते हैं, और परिणामों को किसी अन्य कमांड के तर्कों में प्रतिस्थापित कर सकते हैं। शेल स्पेस, टैब या न्यूलाइन पर परिणाम को विभाजित करेगा, और for
बदले में प्रत्येक मान को $f
पर असाइन करें, और प्रत्येक मान पर कमांड चलाएं।
for f in $(find . -name myFile)
do
cp something $f
done
आप रिक्त स्थान या टैब की क्या ज़रूरत है, तो आप इस्तेमाल कर सकते हैं खोजने के -exec
विकल्प। आप -exec command args
पास करते हैं, {}
डालते हैं जहां आप फ़ाइल नाम को प्रतिस्थापित करना चाहते हैं, और ;
के साथ तर्क समाप्त करना चाहते हैं। आपको {}
और ;
उद्धृत करने की आवश्यकता है ताकि खोल उन्हें समझ न सके।
find . -name myFile -exec cp something "{}" \;
कभी-कभी -exec
पर्याप्त नहीं है। उदाहरण के लिए, this question में, वे फ़ाइल नाम की गणना करने के लिए बैश पैरामीटर विस्तार का उपयोग करना चाहते थे। ऐसा करने के लिए, आपको -exec bash -c 'your command'
पास करने की आवश्यकता है, लेकिन फिर आप {}
प्रतिस्थापन के साथ समस्याओं को उद्धृत करने में भाग लेंगे। इस समस्या के समाधान के लिए, आपको find
से -print0
उपयोग कर सकते हैं अशक्त वर्ण (जो फ़ाइल नाम में अमान्य हैं) के साथ सीमांकित परिणाम प्रिंट, और पाइप यह एक while read
पाश कि nulls पर मापदंडों विभाजन करने के लिए:
find . -name myFile -print0 | (while read -d $'\0' f; do
cp something "$f"
done)
स्रोत
2012-11-05 16:45:05
बस/home/myuser/myFile के बाद, {} की स्थिति को दूसरे स्थान पर बदलें, और यह काम करेगा। धन्यवाद। –
@ लुइस एंड्रेस गारिया, आह, मैंने आपको गलत समझा होगा - आप सीडब्ल्यूडी में 'ढूंढ' द्वारा पाए गए किसी भी 'माईफाइल' को ओवरराइट करने के लिए एक फ़ाइल '/ home/myuser/myFile' की प्रतिलिपि बनाना चाहते थे? –
आप सही हैं! :) किसी और मिली फ़ाइल के गुणों को सूचीबद्ध करने के लिए एक और उदाहरण है: find -exec ls -l {} ';' –