विभिन्न नामों के साथ फ़ाइलों का एक गुच्छा कॉपी और पेस्ट करें


10

मेरे पास नाम के साथ पाठ फ़ाइलों का एक गुच्छा है

foo_bar_abc_1_01_geh_original.in
foo_bar_abc_1_02_geh_original.in
foo_bar_abc_1_03_geh_original.in
...
...
foo_bar_abc_1_1000_geh_original.in

मैं प्रत्येक फ़ाइल की प्रतिलिपि (और मूल फ़ाइलें) रखना चाहूंगा और अलग-अलग नामों (उसी फ़ोल्डर में) में चिपका सकता हूं जैसे,

foo_bar_abc_1_01_geh_copy.in
foo_bar_abc_1_02_geh_copy.in
foo_bar_abc_1_03_geh_copy.in
...
...
foo_bar_abc_1_1000_geh_copy.in

मैं एक साधारण स्क्रिप्ट का उपयोग करके यह कैसे कर सकता हूं?

जवाबों:


13

निर्देशिका बदलें जहां आपके पास मूल फाइलें हैं।

फिर निम्नलिखित कमांड लाइन के साथ परीक्षण करें,

for i in *_original.*;do echo cp -p "$i" "${i/_original./_copy.}";done

और अगर यह अच्छा लगता है, तो हटा दें echoऔर नकल करें,

for i in *_original.*;do cp -p "$i" "${i/_original./_copy.}";done

8

आप निम्न तरीके mcpसे mmvपैकेजMmv स्थापित करें से उपयोग कर सकते हैं :

mcp "*original*" "#1copy#2"

यह वर्तमान निर्देशिका में "मूल" स्ट्रिंग वाली प्रत्येक फ़ाइल की प्रतिलिपि बनाएगा और इस स्ट्रिंग को "प्रतिलिपि" से बदल देगा। आप परीक्षण कर सकते हैं mcpकि -nध्वज को जोड़ने से क्या होगा , हालांकि यह चुपचाप फाइलों को अधिलेखित नहीं करेगा, लेकिन आपसे पूछें। उपयोग करने mmvसे यह फायदा होता है cpकि आपको इसे हर एक फाइल के लिए नहीं बुलाना पड़ता है - एक हजार फाइलों के साथ जैसे आप कॉपी करते हैं, इससे फर्क पड़ता है।

आप निम्न तरीके से GNUparallel समानांतर स्थापित करें का उपयोग कर सकते हैं ( --dry-runपरीक्षण के लिए है, इसे कॉपी करने के लिए हटा दें):

parallel --dry-run cp -p "{}" "{=s/original/copy/=}" ::: *

या, यदि वह "तर्क सूची बहुत लंबी" त्रुटि देता है:

printf "%s\0" * | parallel --dry-run -0 cp -p "{}" "{=s/original/copy/=}"

उदाहरण चलाते हैं

$ ls -1
foo_bar_abc_1_01_geh_original.in
foo_bar_abc_1_02_geh_original.in
foo_bar_abc_1_03_geh_original.in
foo_bar_abc_1_04_geh_original.in
$ mcp "*original*" "#1copy#2"
$ ls -1
foo_bar_abc_1_01_geh_copy.in
foo_bar_abc_1_01_geh_original.in
foo_bar_abc_1_02_geh_copy.in
foo_bar_abc_1_02_geh_original.in
foo_bar_abc_1_03_geh_copy.in
foo_bar_abc_1_03_geh_original.in
foo_bar_abc_1_04_geh_copy.in
foo_bar_abc_1_04_geh_original.in

आइए timeइसे करें, धीमी मशीन पर प्रत्येक 100 कीबी की 1000 से अधिक फाइलें चलाएं :

$ time mcp "*original*" "#1copy#2"
real    0m1.114s
user    0m0.000s
sys     0m0.132s
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.