Я ищу команду для создания нескольких (тысяч) файлов, содержащих не менее 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
и расширения переменной происходит от Bourne оболочки $(...)
, $((...))
и $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
создает файлы из / 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 отдельных файлов по 1 КБ (имена будут проходить от 'file.aaaa' до 'file.zzzz')