एक नियमित समाप्ति के साथ कई बार एक निश्चित फ़ाइल की प्रतिलिपि कैसे करें?


13

मैं एक एकल फाइल (एक पीडीएफ) है और मैं (200 अच्छा होगा) का नाम एक ही फ़ोल्डर में समान प्रतियां के बहुत करना चाहते हैं file-001, file-002आदि

मैं यह कैसे करुं?


नहीं, यह त्रुटि सुधार के लिए है।
टिम

_ एक टाइपो है मुझे आशा है?
रिनजविंड

@Rinzwind हाँ! यह दिलचस्प हो सकता है - प्रत्येक के लिए एक यादृच्छिक चरित्र चुनें? : पी
टिम

@ समय: ठीक है, एक यादृच्छिक "_" या "उत्पन्न करने के लिए -" आप कर सकते हैं: printf "%s\n" "$(cat /dev/urandom | tr -dc '_-' | fold -w 1 | head -n 1 )"(-पी (और चेतावनी दी जा सकती है कि एक कीड़ा है, क्योंकि echo -इस कोने के मामलों में से एक है ...)
रमनो

1
@Rmano मुझे -लगता है कि मैं के साथ रहना होगा : P
टिम

जवाबों:


22

आप कुछ ऐसा कर सकते थे

< file tee file-{001..200}

हालांकि अगर माध्यम अपठनीय हो जाता है, तो इससे कोई फर्क नहीं पड़ेगा कि उस पर कितनी प्रतियां हैं - मूल रूप से बैकअप के लिए विविधता की आवश्यकता होती है

ध्यान दें कि teeमानक आउटपुट के साथ-साथ दी गई फ़ाइलों में से प्रत्येक के लिए अपने मानक इनपुट को लिखते हैं - बड़ी फ़ाइलों के लिए, या बाइनरी डेटा या अन्य विशेष वर्णों वाली फ़ाइलों के लिए जो आपकी टर्मिनल सेटिंग्स में हस्तक्षेप कर सकते हैं, आप शायद मानक आउटपुट को डंप करना चाहेंगे थोड़ी बाल्टी

< file > /dev/null tee file-{001..200}

4
tee file-{001..200} < file >/dev/nullमेरे लिए अधिक कानूनी रूप से देखता है। यह लगभग डुप्लिकेट उत्तर देखें: टर्मिनल में कई फ़ोल्डरों में फाइल कॉपी कैसे करें?
रादु राईडेनु

21

यह क्लासिक मामला है जहां शेल चाल बहुत मदद करती है।

for i in {000..199}; do cp file file-$i; done

और मुझे पता है कि यह एक मजाक है , लेकिन अगर आप एक यादृच्छिक _या -नंबर को उस नाम से अलग करना चाहते हैं जिसका आप उपयोग कर सकते हैं:

for i in {000..199}; do 
    cp file file$(cat /dev/urandom | tr -dc '_-' | fold -w 1 | head -n 1 )$i; 
done

(पठनीयता में मदद करने के लिए कई लाइन ...)

:-P


1
क्या होगा यदि मैं चाहता हूं कि प्रत्येक अभाज्य संख्या एक _और प्रत्येक गैर अभाज्य संख्या हो -? 1 अभाज्य नहीं है, और आप 0 के लिए चुनते हैं! : पी चुटकुले!
टिम

7

किसी फ़ाइल का एक एकल डुप्लिकेट बनाने के लिए जिसे आप शायद जानते हैं कि आप उपयोग कर सकते हैं cp:

cp file file-001

अब, किसी फ़ाइल में अधिक डुप्लिकेट बनाने के लिए, आप के cpसाथ संयोजन कर सकते हैं xargs। आपके मामले में:

echo file-{001..200} | xargs -n 1 cp file

कॉपी करेंगे fileकरने के लिए file-001, file-002, ..., file-200man xargsअधिक जानकारी के लिए देखें ।


4

हमेशा की तरह, अजगर ट्रक देर से आता है, लेकिन:

इसे निष्पादन योग्य बनाएं, इसे टर्मिनल विंडो पर खींचें, टर्मिनल विंडो पर प्रतिलिपि बनाने के लिए फ़ाइल खींचें और प्रतियों की संख्या निर्धारित करें:

script file number_ofcopies

प्रमुख शून्य की संख्या स्वचालित रूप से सेट की जाती है, फ़ाइलों को नाम दिया जाता है file_001.pdf, विस्तार के पहलेfile_002.pdf फाइलन के साथ रखा जाता है ।

लिपी:

#!/usr/bin/env python3

import sys
import shutil

orig = sys.argv[1]; n = sys.argv[2]; size = len(str(n)); out = (orig[:orig.rfind(".")], orig[orig.rfind("."):])
for item in [out[0]+"_"+(size-len(str(item)))*"0"+str(item)+out[1] for item in range(1, int(n)+1)]:
    shutil.copyfile(orig, item)

हाँ, मैंने पहले अजगर के साथ कोशिश की थी, लेकिन इस तरह की अशुभता पसंद नहीं थी ... मैं आमतौर पर अजगर के लिए जाता हूं :)
टिम

@ यह इस साइट पर कोड का फ़ॉन्ट होना चाहिए जो अजगर कोड की सुंदरता में बाधा डालता है :)
याकूब Vlijm

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