मैं कम से कम 1KB यादृच्छिक डेटा वाली एकाधिक (हजारों) फ़ाइलों को बनाने के लिए कमांड की तलाश कर रहा हूं।
उदाहरण के लिए,
Name size
file1.01 2K
file2.02 3K
file3.03 5K
etc.
मैं इस तरह की कई फाइलें कैसे बना सकता हूं?
मैं कम से कम 1KB यादृच्छिक डेटा वाली एकाधिक (हजारों) फ़ाइलों को बनाने के लिए कमांड की तलाश कर रहा हूं।
उदाहरण के लिए,
Name size
file1.01 2K
file2.02 3K
file3.03 5K
etc.
मैं इस तरह की कई फाइलें कैसे बना सकता हूं?
जवाबों:
चूंकि आपके पास कोई अन्य आवश्यकताएं नहीं हैं, इसलिए कुछ इस तरह काम करना चाहिए:
#! /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}
)।
bash
कई कारणों की आवश्यकता होती है, जिसमें शामिल हैं $((…))
और $RANDOM
। यहां तक कि हर खोल $(…)
में मौजूद नहीं हो सकता है ।
bash
और न ही वे उत्पन्न होते हैं bash
(से {1..1000}
आता है zsh
, for n in...; done
और चर विस्तार बॉर्न शेल से आता है $(...)
, $((...))
और $RANDOM
ksh आता है)। जो सुविधाएँ POSIX नहीं हैं {1..1000}
, $RANDOM
और हैं /dev/urandom
।
"%04d"
में जो मामले bash
या zsh
कर सकते हैं {0001..1000}
के साथ कोईprintf
साथ एक बदलाव 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 10
01 से 10 तक संख्याओं का एक क्रम प्रिंट करता है
xargs -n1 -I%
इसके साथ % कीsh -c 'dd ... % ...'
जगह प्रत्येक क्रम संख्या के लिए कमांड निष्पादित करता है
dd if=/dev/urandom of=file.% bs=$(shuf ...) count=1024
1024 ब्लॉके के साथ / dev / urandom से फीड की गई फाइलों को एक ब्लॉकेज के साथ बनाता है
shuf -i1-10 -n1
1 से 10 तक एक यादृच्छिक मूल्य
आप ऐसा कुछ कर सकते हैं:
#!/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
यह एक एकल पाइपलाइन का उपयोग करता है और काफी तेज लगता है, लेकिन इसकी सीमा है कि सभी फाइलें समान आकार की हैं
dd if=/dev/urandom bs=1024 count=10240 | split -a 4 -b 1k - file.
स्पष्टीकरण: 10240 * 1024 बाइट्स डेटा बनाने के लिए dd का उपयोग करें; विभाजित करें कि 1k के 10240 अलग-अलग फाइल (नाम 'file.aaaa' से 'file.zzzz' से चलेंगे)