अगर ext मिल जाए तो cp पैरेंट dir बाकी गूंज नहीं पाया


1

अब तक मैं यही लेकर आया हूं।

if ls -1 ~/Downloads/*.mkv >/dev/null 2>&1
then
        echo 1
else
        echo 0
fi

लेकिन जो मैं करना चाहता हूं, वह यह है कि मिली हुई फ़ाइल के मूल डायर को किसी अन्य स्थान पर कॉपी करें।

मुझे लग रहा है कि मुझे केवल खोज कमांड का उपयोग करना चाहिए।


क्या आप कृपया बता सकते हैं कि आपको वास्तव में क्या हासिल करना है? यदि किसी फ़ोल्डर में ए .mkv आप फ़ोल्डर को कहीं और कॉपी करना चाहते हैं?
slhck

@ एलशेक हां, यही मैं करना चाहूंगा।
David Custer

जवाबों:


1

अगर रास्ते में व्हाट्सएप हो तो फेडे.वोल का जवाब विफल हो जाता है। का उत्पादन find या ls एक कमांड प्रतिस्थापन में इस्तेमाल नहीं किया जाना चाहिए

सभी फ़ाइलनामों से निपटने का उचित तरीका (न्यूलाइन के साथ रास्तों को छोड़कर) होगा:

find /somewhere -name "*.mkv" -exec dirname {} \; | uniq | \
while IFS= read -r dir; do echo cp -- "$dir" /other/; done

इस तरह, प्रत्येक फ़ोल्डर से /somewhere को कॉपी किया जाता है /other/। ध्यान दें कि अनुगामी स्लैश अनिवार्य है, क्योंकि अन्यथा लक्ष्य हमेशा ओवरराइट किया जाएगा।


1

उपयोग dirname FILE किसी दिए गए फ़ाइल का निर्देशिका नाम प्राप्त करने के लिए। उदाहरण के लिए:

find DIRECTORY -name "*.mkv" -exec dirname {} \;

आपको DIRECTORY के तहत MKV के साथ सभी निर्देशिकाएं देगा। तब आप उन्हें पार कर सकते हैं uniq डुप्लिकेट पाने के लिए नहीं और फिर केस कॉपी में।

उदाहरण के लिए

cp -a `find DIRECTORY -name "*.mkv" -exec dirname {} \; | uniq` DESTDIR

यदि निर्देशिका पथ में स्थान है तो आपका अंतिम आदेश विफल हो जाएगा। आपको आदेश प्रतिस्थापन का उपयोग नहीं करना चाहिए find या ls उत्पादन।
slhck
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.