Я шукаю команду для створення декількох (тисяч) файлів, що містять принаймні 1 КБ випадкових даних.
Наприклад,
Name size
file1.01 2K
file2.02 3K
file3.03 5K
etc.
Як я можу створити багато таких файлів?
Я шукаю команду для створення декількох (тисяч) файлів, що містять принаймні 1 КБ випадкових даних.
Наприклад,
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}з noprintf
Різновид з 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створює файли, подані з / dev / urandom з 1024 блоками з розміром блоків
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.
Пояснення: Використовуйте dd для створення 10240 * 1024 байт даних; розділіть це на 10240 окремих файлів по 1k кожен (імена будуть працювати від 'file.aaaa' через 'file.zzzz')