मैं कम से कम 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 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 तक एक यादृच्छिक मूल्य
आप ऐसा कुछ कर सकते हैं:
#!/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' से चलेंगे)