2013-01-15 13 views
11

में किसी विशिष्ट प्रकार की सभी फ़ाइलों को एक लक्षित निर्देशिका में स्थानांतरित करने के लिए पुन: क्रमबद्ध रूप से मैं फ़ोल्डर से सभी .txt फ़ाइलों को कैसे स्थानांतरित कर सकता हूं और सभी फ़ोल्डर को एक लक्षित निर्देशिका में शामिल कर सकता हूं।बैश

और अधिमानतः उन फ़ोल्डर में उनका नाम बदलें जहां वे शामिल हैं, हालांकि यह महत्वपूर्ण नहीं है। मैं बैश से बिल्कुल परिचित नहीं हूँ।

उत्तर

23

फ़ाइलों को दोबारा स्थानांतरित करने के लिए, mv के साथ गठबंधन करें।

find src/dir/ -name '*.txt' -exec mv {} target/dir/ \; 

फ़ाइलों को पुनर्नामित करने के लिए जब आप उन्हें स्थानांतरित करते हैं तो यह कठिन होता है। एक तरीका यह है कि एक लूप होना है जो tr/_ के माध्यम से प्रत्येक फ़ाइल नाम को पास करता है, जो अंडरस्कोर में स्लेश को परिवर्तित करता है।

find src/dir/ -name '*.txt' | while read file; do 
    mv "$file" "target/dir/$(tr/_ <<< "$file")" 
done 
+0

एक संस्करण जो एम्बेडेड न्यूलाइन वाली फ़ाइलों के साथ काम करेगा, या रिक्त स्थान से शुरू होगा: 'src/dir -name '* .txt' -exec bash -c 'mv" $ 1 "" $ {1 // \// _} "'_ {}'; '' –

1

यदि यह सिर्फ एक स्तर है:

mv *.txt */*.txt target/directory/somewhere/. 
11

इस प्रयास करें:

find source -name '*.txt' | xargs -I files mv files target 

यह तेजी से -exec के साथ किसी भी विकल्प की तुलना में, क्योंकि यह एक झुलसाना mv प्रक्रिया आह्वान नहीं होगा काम करेंगे प्रत्येक फाइल के लिए जो स्थानांतरित करने की जरूरत है।

+0

महान समाधान और गंभीरता से तेज़ ... – Blacklight

+1

स्वीकार्य उत्तर से बहुत तेज़ है। ध्यान दें कि मजबूती के लिए शून्य-समाप्त फ़ाइल नाम स्ट्रिंग का उपयोग करना एक अच्छा विचार है: 'स्रोत-नाम '* .txt' -print0 खोजें। xargs -0 -I फ़ाइलें एमवी फाइल लक्ष्य ' – cooperised