मैं किस प्रकार से फ़ाइलों को एक निर्देशिका से और दूसरी निर्देशिका में इसकी उप-निर्देशिकाओं से पुन: स्थानांतरित कर सकता हूं?


30

एक डायरेक्टरी और उसके सभी उप-डायरेक्टरीज़ से फ़ाइल प्रकार को स्थानांतरित करने का एक अच्छा तरीका क्या होगा?

जैसे "चाल सभी * .ogg in / itdir recursively to / somedir"। मैंने कुछ चीजों की कोशिश की; मेरा सबसे अच्छा प्रयास था (अभी भी वह महान नहीं है):

find /thisdir -type f -name '*.ogg' -exec mv /somedir {} \;

यह प्रत्येक फ़ाइल नाम से पहले प्रत्येक पंक्ति पर वापस आ गया,

mv: cannot overwrite non-directory `/thisdir/*.ogg' with directory `/somedir'

जवाबों:


23

आप इसके लिए xargs के साथ पा सकते हैं

find /thisdir -type f -name "*.ogg" -print0 | xargs -0 -Imysongs mv -i mysongs /somedir

उपरोक्त कमांड में -I xargs को बताता है कि आप किस प्रतिस्थापन स्ट्रिंग का उपयोग करना चाहते हैं (अन्यथा यह तर्कों को कमांड के अंत में जोड़ता है)।

या
आपके आदेश में केवल कमांड के बाद '{}' को स्थानांतरित करने का प्रयास करें mv

find /thisdir -type f -name '*.ogg' -exec mv -i {} /somedir \;


1
कृपया ऊपर दिए गए आदेशों को आज़माने से पहले बैकअप लेना न भूलें :-)।
हेमंत

2
Btw, खोजने के लिए पहले -0 के लिए और xargs के लिए -0 का उपयोग संभव के रूप में किया जाना चाहिए, फ़ाइल नाम की समस्याओं में व्हाट्सएप से बचने के लिए।
मैक्सक्लेपजिग सेप

@ maxschlepzig: अच्छी बात है। मैं संपादित करूंगा।
हेमंत

2
मैं दृढ़ता से mv -iयहाँ उपयोग करने का सुझाव देता हूं , इसलिए यदि कुछ अप्रत्याशित होता है तो आप फाइलों पर ओवरराइटिंग का जोखिम नहीं उठाते हैं।
गिल्स एसओ- बुराई को रोकें '

2
ग्नू कोर बर्तनों से एमवी के साथ आप उपयोग कर सकते हैं mv -t <targetdir>और + के बजाय +;


9

सभी *.oggफ़ाइलों को एकत्रित करने के लिए zsh या bash 4 में /somedir:

mv /thisdir/**/*.ogg /somedir

यदि आप निर्देशिका पदानुक्रम को पुन: उत्पन्न करना चाहते हैं: (चेतावनी, सीधे ब्राउज़र में टाइप किया गया)

rsync -a --prune-empty-dirs --include='*/' --include='*.ogg' --exclude='*' /thisdir /somedir

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