Створіть багато файлів із випадковим вмістом


23

Я шукаю команду для створення декількох (тисяч) файлів, що містять принаймні 1 КБ випадкових даних.

Наприклад,

Name            size
file1.01        2K
file2.02        3K
file3.03        5K
etc.

Як я можу створити багато таких файлів?


Що ви мали на увазі під "ексклюзивом"? Це не має сенсу в контексті, тому ви, мабуть, ввели неправильне слово.
Жиль "ТАК - перестань бути злим"

Я мав на увазі, що файли не можуть мати однаковий вміст.
Жоао Хосе

Отже, ексклюзив означав би унікальне.
somehume

Відповіді:


25

Оскільки у вас немає жодних інших вимог, щось подібне повинно працювати:

#! /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}).


2
Це потрібно bashз численних причин, в тому числі $((…))і $RANDOM. Навіть $(…)може не існувати в кожній оболонці.
G-Man каже: "Відновіть Моніку"

1
@ G-Man, у будь-якому випадку, жодна з цих особливостей не є специфічною bashі не походить з них bash ( {1..1000}походить від zsh, for n in...; doneа змінне розширення походить від оболонки Борна $(...), $((...))і $RANDOM приходить ksh). Особливості, які не є POSIX {1..1000}, $RANDOMі /dev/urandom.
Стефан Шазелас

1
Якщо ви хотіли, щоб 1..1000 була постійної ширини, вам потрібно "%04d"в такому випадку, bashабо ви zshможете зробити це {0001..1000}з noprintf
dave_thompson_085

Додаткова функція: мені потрібен спосіб поширення цих файлів на безліч випадково названих вкладених підкаталогів.
Ст

10

Різновид з 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


Ват робить це саме так?
saruftw

1
@ saru95 додано пояснення.
FloHimself

Це створює 10 файлів з випадковим розміром. Змініть "10" на кількість потрібних файлів.
Най

2

Ви можете зробити щось подібне:

#!/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

Я спробував це зробити, але не вийшло. Ви можете пояснити параметри. :)
Жоао Хосе

дуже швидко thx @rahul
BG Bruno

2

При цьому використовується один конвеєр і здається досить швидким, але є обмеження, що всі файли однакового розміру

dd if=/dev/urandom bs=1024 count=10240 | split -a 4 -b 1k - file.

Пояснення: Використовуйте dd для створення 10240 * 1024 байт даних; розділіть це на 10240 окремих файлів по 1k кожен (імена будуть працювати від 'file.aaaa' через 'file.zzzz')

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.