फ़ाइलों को एक निर्देशिका से दूसरी निर्देशिका में पुन: कॉपी करें


11

मेरा सारा संगीत एक फोल्डर में है /media/kalenpw/MyBook/Music/ABunchOfOtherFoldersWithFilesInside। मैं सभी एमपी 3 को कॉपी करना चाहता हूं /media/kalenpw/HDD/Musicइसलिए मैंने इसका उपयोग किया:

cp -R /media/kalenpw/MyBook/Music/*.mp3 /media/kalenpw/HDD/Music

हालाँकि, इसने केवल एमपी 3 को रूट म्यूज़िक फ़ोल्डर में कॉपी किया और किसी भी कलाकार सबडायरेक्टरी को नहीं खोला और उन फाइलों को कॉपी किया।

मैं इस धारणा के अधीन था कि -Rसभी फाइलों को पुन: कॉपी किया जाएगा। मैं कहा लक्ष्य कैसे प्राप्त कर सकता हूं?

जवाबों:


19

उपयोग:

find /media/kalenpw/MyBook/Music/ -name '*.mp3' -exec cp {} /media/kalenpw/HDD/Music \;

अपने आदेश काम नहीं कर के लिए कारण यह है कि नाम वाइल्डकार्ड (युक्त *.mp3) आदेश से पहले का विस्तार कर रहे हैं चलाया जाता है, इसलिए यदि आप तीन फ़ाइलों था ( 01.mp3, 02.mp3, 03.mp3) अपने प्रभावी आदेश था:

cp -R /media/kalenpw/MyBook/Music/01.mp3 /media/kalenpw/MyBook/Music/02.mp3 /media/kalenpw/MyBook/Music/03.mp3 /media/kalenpw/HDD/Music

जैसा कि आप देख सकते हैं -Rइस मामले में कोई प्रभाव नहीं है।


यदि कोई फ़ाइल समाप्त हो जाती है, तो मैं -inameइसके बजाय सलाह देता हूं । -name.MP3
ओलाथे

शुक्रिया ये काम किया। या कम से कम काम करने की प्रक्रिया में है।
kalenpw

5

आपने विशेष रूप से उन फ़ाइलों (नों) / निर्देशिका (ies) का उल्लेख किया है जिनका उपयोग करके प्रतिलिपि बनाई जा रही है *.mp3अर्थात किसी भी फ़ाइल / निर्देशिका का नाम जो समाप्त हो रहा है .mp3

इसलिए किसी भी में समाप्त होने वाले फ़ाइल .mp3में /media/kalenpw/MyBook/Music/निर्देशिका और इसी तरह, किसी भी निर्देशिका में समाप्त होने .mp3में /media/kalenpw/MyBook/Music/कॉपी किया जायेगा, रिकर्सिवली। यदि ऐसी कोई मेल की गई फ़ाइल / निर्देशिका नहीं है, तो कुछ भी कॉपी नहीं किया जाएगा।

अब recursivley से डायरेक्टरी की सभी .mp3फाइलों को कॉपी /media/kalenpw/MyBook/Music/करने के लिए /media/kalenpw/HDD/Music/:

  • का उपयोग कर bash:

    shopt -s globstar
    cp -at /media/kalenpw/HDD/Music /media/kalenpw/MyBook/Music/**/*.mp3
    
  • का उपयोग कर find:

    find /media/kalenpw/MyBook/Music -type f -name '*.mp3' -exec cp -at /media/kalenpw/HDD/Music {} +
    

धन्यवाद, टेक्राफ ने पहले उत्तर दिया इसलिए मैंने उनके उत्तर को स्वीकार कर लिया।
kalenpw

1

आप cpr का भी उपयोग कर सकते हैं :

$ cd /media/kalenpw/HDD/Music
$ cpr -p '/\.mp3$/' '/media/kalenpw/MyBook/Music/'

ध्यान दें कि बिना -p सीपीआर कॉपी किए गए फाइलनाम पर पूरी निर्देशिका पथ को संरक्षित करेगा। '/media.../Music/' के तहत पथ को संरक्षित करने के लिए
-r(इसके बजाय -p) का उपयोग किया जा सकता है ।
यह भी cprध्यान रखा जाएगा कि कोई फ़ाइल ओवरराइट न हो, किसी भी दोहराया फ़ाइल नाम पर '0001' से शुरू होने वाली संख्या को जोड़कर।


1

मान लीजिए कि आप का एक समूह है .docx, .mp3, .txtऔर .xlsxइस निर्देशिका संरचना में संग्रहीत फ़ाइलों:

/files/
/files/dir1/
/files/dir1/dir11/
/files/dir1/dir12/
/files/dir1/dir13/
/files/dir2/
/files/dir3/
/files/dir3/dir31/
/files/dir3/dir32/
/files/dir4/
/files/dir5/
/files/dir51/
/files/dir52/
/files/dir53/
/files/dir54/

... और आप सभी मिली .mp3फ़ाइलों को कॉपी करने के लिए ऐसी सभी निर्देशिकाओं में फिर से आना चाहते हैं, /home/me/music/लेकिन आप गंतव्य में ऐसी निर्देशिका ट्री को संरक्षित नहीं करना चाहते हैं (यानी आप चाहते हैं कि सभी मिली हुई .mp3फ़ाइलों /home/me/music/को संबंधित निर्देशिकाओं में कॉपी करने के बजाय कॉपी किया जाए। जैसे /home/me/music/dir1/, /home/me/music/dir1/dir11/वगैरह)।

ऐसे मामले में, शेल टर्मिनल (बैश) में आपकी फ़ाइल खोज की जड़ तक पहुँचने के लिए सबसे पहले इस कमांड को चलाएँ:

cd /files

... और फिर इस कमांड को चलाएं:

for i in `find . -iname '*.mp3'`; do cp $i /home/me/music/; done

यदि आप गंतव्य में स्रोत की निर्देशिका ट्री को संरक्षित करना चाहते हैं, तो इसके बजाय इस कमांड को चलाएं (चलाने के बाद cd /files):

find . -iname '*.mp3' | cpio -pdm /home/me/music/

ऊपर बताए गए आदेशों पर, खोज केस-संवेदी है (यानी मैचों .mp3, .MP3, .mP3और .Mp3)। -nameइसके बजाय इसका उपयोग करें -inameयदि आप चाहते हैं कि खोज केस-संवेदी हो (जैसे कि वर्णों -nameके .mp3स्ट्रिंग के लिए उपयोग करने से समाप्त होने वाली फ़ाइलों के साथ मेल खाएगा, .mp3लेकिन न तो समाप्त होने वाले .MP3, .mP3न ही .Mp3)।


उस स्थिति के लिए जहां आप निर्देशिका संरचना को संरक्षित करना चाहते हैं , इस आदेश को स्रोत निर्देशिका से चलाएँ। यदि आप चलाते हैं find /source/dir -iname '*.mp3' | cpio -pdm /home/me/music/, तो यह / होम / मी / म्यूजिक / सोर्स / डीआईआर बनाएगा और फाइलों को इस नए स्थान पर कॉपी किया जाएगा।
गौतम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.