قم بإنشاء ملف عشوائي باستخدام البرنامج النصي shell

StackOverflow https://stackoverflow.com/questions/2587092

  •  24-09-2019
  •  | 
  •  

سؤال

كيف يمكنني إنشاء ملف عشوائي مملوء برقم أو حرف عشوائي في البرنامج النصي shell؟ أريد أيضًا تحديد حجم الملف.

هل كانت مفيدة؟

المحلول

يستخدم dd أمر لقراءة البيانات من /dev /عشوائي.

dd if=/dev/random of=random.dat bs=1000000 count=5000

هذا من شأنه أن يقرأ 5000 1 ميجابايت من كتل البيانات العشوائية ، وهو 5 جيجابت كامل من البيانات العشوائية!

تجربة الحجة الكتل للحصول على الأداء الأمثل.

نصائح أخرى

head -c 10 /dev/random > rand.txt

تغيير 10 إلى أي شيء. اقرأ "رجل عشوائي" للاختلافات بين /dev /عشوائي و /dev /urandom.

أو ، لأحرف Base64 فقط

head -c 10 /dev/random | base64 | head -c 10 > rand.txt

قد يتضمن BASE64 بعض الشخصيات التي لا تهتم بها ، ولكن لم يكن لديها وقت للتوصل إلى محول أحرف أفضل منفردة ... (نحن أيضًا نأخذ الكثير من البايتات من /dev /عشوائي. آسف ، بركة إنتروبيا!)

ستكون بداية جيدة:

http://linuxgazette.net/153/pfeiffer.html

#!/bin/bash
# Created by Ben Okopnik on Wed Jul 16 18:04:33 EDT 2008

########    User settings     ############
MAXDIRS=5
MAXDEPTH=2
MAXFILES=10
MAXSIZE=1000
######## End of user settings ############

# How deep in the file system are we now?
TOP=`pwd|tr -cd '/'|wc -c`

populate() {
    cd $1
    curdir=$PWD

    files=$(($RANDOM*$MAXFILES/32767))
    for n in `seq $files`
    do
        f=`mktemp XXXXXX`
        size=$(($RANDOM*$MAXSIZE/32767))
        head -c $size /dev/urandom > $f
    done

    depth=`pwd|tr -cd '/'|wc -c`
    if [ $(($depth-$TOP)) -ge $MAXDEPTH ]
    then
        return
    fi

    unset dirlist
    dirs=$(($RANDOM*$MAXDIRS/32767))
    for n in `seq $dirs`
    do
        d=`mktemp -d XXXXXX`
        dirlist="$dirlist${dirlist:+ }$PWD/$d"
    done

    for dir in $dirlist
    do
        populate "$dir"
    done
}

populate $PWD

قم بإنشاء 100 ملف تسمي بشكل عشوائي من 50 ميجابايت في الحجم لكل:

for i in `seq 1 100`; do echo $i; dd if=/dev/urandom bs=1024 count=50000 > `echo $RANDOM`; done

سيمنحك المتغير العشوائي رقمًا مختلفًا في كل مرة:

echo $RANDOM

حفظ باسم "script.sh" ، قم بتشغيل حجم ./script.sh. تم رفع رمز printf من http://mywiki.wooledge.org/bashfaq/071. بالطبع ، يمكنك تهيئة مجموعة Mychars مع قوة وحشي ، mychars = ("0" "" 1 "..." A "..." Z "" A "..." Z ") ، لكن هذا لن يحدث كن متعة ، أليس كذلك؟

#!/bin/bash
declare -a mychars
for (( I=0; I<62; I++ )); do
    if [ $I -lt 10 ]; then
        mychars[I]=$I
    elif [ $I -lt 36 ]; then
        D=$((I+55))
        mychars[I]=$(printf \\$(($D/64*100+$D%64/8*10+$D%8)))
    else
        D=$((I+61))
        mychars[I]=$(printf \\$(($D/64*100+$D%64/8*10+$D%8)))
    fi
done
for (( I=$1; I>0; I-- )); do
     echo -n ${mychars[$((RANDOM%62))]}
done
echo
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top