यादृच्छिक सामग्री के साथ कई फाइलें बनाएं


23

मैं कम से कम 1KB यादृच्छिक डेटा वाली एकाधिक (हजारों) फ़ाइलों को बनाने के लिए कमांड की तलाश कर रहा हूं।

उदाहरण के लिए,

Name            size
file1.01        2K
file2.02        3K
file3.03        5K
etc.

मैं इस तरह की कई फाइलें कैसे बना सकता हूं?


"अनन्य" से आपका क्या अभिप्राय था? यह संदर्भ में कोई मतलब नहीं है, इसलिए आपने शायद गलत शब्द का इस्तेमाल किया है।
गिल्स एसओ- बुराई को रोकना '

मेरा मतलब था कि फ़ाइलों में समान सामग्री नहीं हो सकती।
जोओ जोस

तो, अनन्य का मतलब अनोखा होगा।
somehume

जवाबों:


25

चूंकि आपके पास कोई अन्य आवश्यकताएं नहीं हैं, इसलिए कुछ इस तरह काम करना चाहिए:

#! /bin/bash
for n in {1..1000}; do
    dd if=/dev/urandom of=file$( printf %03d "$n" ).bin bs=1 count=$(( RANDOM + 1024 ))
done

(यह bashकम से कम के लिए की जरूरत है {1..1000})।


2
इसमें bashकई कारणों की आवश्यकता होती है, जिसमें शामिल हैं $((…))और $RANDOM। यहां तक ​​कि हर खोल $(…)में मौजूद नहीं हो सकता है ।
जी-मैन का कहना है कि 'मोनिका'

1
@ जी-मैन, किसी भी मामले में, उन विशेषताओं में से कोई भी विशिष्ट नहीं है bashऔर न ही वे उत्पन्न होते हैं bash (से {1..1000}आता है zsh, for n in...; doneऔर चर विस्तार बॉर्न शेल से आता है $(...), $((...))और $RANDOM ksh आता है)। जो सुविधाएँ POSIX नहीं हैं {1..1000}, $RANDOMऔर हैं /dev/urandom
स्टीफन चेज़लस

1
आप 1..1000 बनना चाहता था तो निरंतर-चौड़ाई आप की जरूरत "%04d"में जो मामले bashया zshकर सकते हैं {0001..1000}के साथ कोईprintf
dave_thompson_085

अतिरिक्त सुविधा: मुझे इन फ़ाइलों को बेतरतीब ढंग से नेस्टेड उपनिर्देशिकाओं के नाम से फैलाने का एक तरीका चाहिए।
स्टू

10

साथ एक बदलाव seq, xargs, ddऔर shuf:

seq -w 1 10 | xargs -n1 -I% sh -c 'dd if=/dev/urandom of=file.% bs=$(shuf -i1-10 -n1) count=1024'

टिप्पणियों के अनुसार अनुरोध किया गया स्पष्टीकरण:

seq -w 1 1001 से 10 तक संख्याओं का एक क्रम प्रिंट करता है

xargs -n1 -I%इसके साथ % कीsh -c 'dd ... % ...' जगह प्रत्येक क्रम संख्या के लिए कमांड निष्पादित करता है

dd if=/dev/urandom of=file.% bs=$(shuf ...) count=10241024 ब्‍लॉके के साथ / dev / urandom से फीड की गई फाइलों को एक ब्‍लॉकेज के साथ बनाता है

shuf -i1-10 -n11 से 10 तक एक यादृच्छिक मूल्य


वॉट ठीक यही करता है?
सरफेट

1
@ saru95 स्पष्टीकरण जोड़ा गया।
फ्लोइम स्वयं

यह यादृच्छिक आकार के साथ 10 फाइलें बनाता है। वांछित फ़ाइलों की संख्या में "10" बदलें।
नाय

2

आप ऐसा कुछ कर सकते हैं:

#!/bin/bash
filecount=0
while [ $filecount -lt 10000 ] ; do
    filesize=$RANDOM
    filesize=$(($filesize+1024))
    base64 /dev/urandom | 
    head -c "$filesize" > /tmp/file${filecount}.$RANDOM
    ((filecount++))
done

मैंने ऐसा करने की कोशिश की लेकिन काम नहीं किया। आप मापदंडों की व्याख्या करना चाह सकते हैं। :)
जोहो जोस

बहुत तेज thx @ प्रह्लाद
बीजी ब्रूनो

2

यह एक एकल पाइपलाइन का उपयोग करता है और काफी तेज लगता है, लेकिन इसकी सीमा है कि सभी फाइलें समान आकार की हैं

dd if=/dev/urandom bs=1024 count=10240 | split -a 4 -b 1k - file.

स्पष्टीकरण: 10240 * 1024 बाइट्स डेटा बनाने के लिए dd का उपयोग करें; विभाजित करें कि 1k के 10240 अलग-अलग फाइल (नाम 'file.aaaa' से 'file.zzzz' से चलेंगे)

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