विशिष्ट फ़ाइलों की प्रतिलिपि बनाएँ और सबफ़ोल्डर संरचना रखें


2

मुझे कई उप फ़ोल्डर में विभिन्न प्रत्ययों के साथ बड़ी मात्रा में फ़ाइलों के साथ एक फ़ोल्डर मिला।

मेरा ऑटोमेटर वर्कफ़्लो निम्नानुसार काम करता है:

  1. खोजक आइटम के लिए पूछें
  2. फ़ोल्डर सामग्री प्राप्त करें (उप फ़ोल्डर विकल्प की जाँच की गई)
  3. फ़िल्टर खोजक आइटम (एक विशिष्ट फ़ाइल-प्रत्यय के लिए)
  4. कॉपी खोजक आइटम

यह एक आकर्षण की तरह काम करता है। लेकिन सभी फ़ाइलों को एक ही रूट गंतव्य फ़ोल्डर में कॉपी किया जाता है। मुझे उप फ़ोल्डर संरचना रखने की आवश्यकता है। उदाहरण के लिए:

sourceFolder
    subfolderA
        fileA.jpg
        fileB.xls
        fileC.xls
    subfolderB
        fileC.jpg
        fileD.xls
        fileE.xls

अपेक्षित परिणाम (फ़ाइल प्रत्यय .xls के लिए फ़िल्टर):

destinationFolder
    subfolderA
        fileB.xls
        fileC.xls
    subfolderB
        fileD.xls
        fileE.xls

वर्तमान परिणाम:

destinationFolder
    fileB.xls
    fileC.xls
    fileD.xls
    fileE.xls

अपडेट करें

मैं एक डेवलपर हूं। तो एक शेल या AppleScript भी स्वीकार किया जाएगा। :)

जवाबों:


3
rsync -avh --include='*/' --include='*.xls' --exclude='*' path/to/sourceFolder/ path/to/destinationFolder

/स्रोत पथ के अंत में ध्यान दें , यह महत्वपूर्ण है । यह समाधान सभी खाली निर्देशिकाओं को जोड़ देगा, यदि आप उन्हें नहीं चाहते हैं, तो विकल्प देखें --prune-empty-dirs

ब्रेस विस्तार के साथ आप वास्तव में होने के बजाय एक ही बार में अधिक फ़िलेपेट्स को शामिल कर सकते हैं

--include='*.xls' --include='*.pdf' --include='*.txt'

आप उपयोग कर सकते हैं

--include='*.'{xls,pdf,txt}

महान। Ty! मैं परीक्षण करूंगा और वापस आऊंगा।
टीनो रुब

आप अपने इच्छित सभी विकल्पों को जोड़ सकते हैं, इसमें महत्वपूर्ण हिस्सा शामिल है-शामिल नहीं: सभी निर्देशिकाएं (पुनरावृत्ति के लिए आवश्यक) और सभी .xlsफाइलें शामिल करें, फिर बाकी सब कुछ शामिल न करें। यदि आप अधिक चीजें चाहते हैं, जैसे --deleteउन्हें अपने आदेश में जोड़ें।
मैनुअल

1

मैं एक शेल स्क्रिप्ट के साथ अंत करता हूं, जो अनुरोध के अनुसार काम करता है:

$ find ./sourceFolder -name "*.xls*" -type f -print0 | xargs -0 -I '{}' /usr/bin/rsync -avR "{}" "./destinationFolder/"

rsync -avh --include='*/' --include='*.xls' --exclude='*' sourceFolder/ destinationFolder? ब्रेस विस्तार के साथ आप वास्तव में अधिक फिलैटिप शामिल कर सकते हैं --include='*.'{xls,pdf,txt}
मैनुअल

@ मैनुअल टाय! आपके समाधान के कोई फायदे / नुकसान?
टीनो रूब

कि आप पाइप के माध्यम से समतल नहीं करते हैं, आप बस rsyncएक बार एप्रिप्टेड झंडे के साथ कॉल करते हैं।
मैनुएल

0

एक शेल स्क्रिप्ट में आप एक BOM (सामग्री का बिल) फ़ाइल बनाने के लिए mkbom का उपयोग कर सकते हैं जिसमें उन फ़ाइलों की एक सूची होती है जिन्हें आप कॉपी करना चाहते हैं। फिर आप BOM फ़ाइल में सूचीबद्ध फ़ाइलों की प्रतिलिपि बनाने के लिए --bom विकल्प के साथ ditto कमांड का उपयोग कर सकते हैं।


Ty! आपके समाधान के कोई फायदे / नुकसान?
टिनो रुब
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.