2013-08-02 7 views
12

से मिलान करने वाली कई निर्देशिकाओं का नाम बदलें। मैं एक नाम से संबंधित सभी निर्देशिकाओं का नाम बदलना चाहता हूं जो नाम से मेल खाते हैं। उदाहरण के लिए:पैटर्न

basedir/ में, मेरे पास है:

- foo/bar/blah 
- my/bar/foo 
- some/bar/foo1 
- other/foo/bar 

मैं bar मिलान सभी निर्देशिकाओं का नाम बदलने के लिए करना चाहते हैं, लेकिन मैं उपसर्ग भाग की रक्षा करना चाहते हैं।

find के साथ, मैं आसानी से इस तरह सभी निर्देशिकाओं की एक सूची बना सकते हैं:

find . -name repositoryunit -type d 

हालांकि, मैं कैसे -exec mv {} ... (या शायद अन्य ऐप्लिकेशन के साथ गठबंधन) ताकि उपसर्ग संरक्षित है का उपयोग कर सकते हैं?

अग्रिम में बहुत धन्यवाद!

उत्तर

21
find . -name bar -type d -execdir mv {} baz \; 

-execdir माता-पिता के लिए निर्देशिका में परिवर्तन आदेश को क्रियान्वित करने से पहले, इसलिए यहाँ mv प्रत्येक मूल निर्देशिका के लिए स्थानीय हो जाएगा।

+0

ध्यान रखें, कि अगर खोजी गई निर्देशिका में पहले से ही एक निर्देशिका "बाज़" है, तो "बार" इसमें स्थानांतरित हो जाएगा। – mkudlacek

+1

यदि आपको 'ढूंढें:' ***** ': ... आदेश को निष्पादित करने के बाद कोई ऐसी फ़ाइल या निर्देशिका' नहीं है, तो' -depth' जोड़ें, जो निर्देशिका को स्वयं त्रुटियों को हटाने से पहले निर्देशिका सामग्री को संसाधित करेगा। – lepe

संबंधित मुद्दे