Buat banyak file dengan konten acak

23

Saya mencari perintah untuk membuat beberapa (ribuan) file yang berisi setidaknya 1KB data acak.

Sebagai contoh,

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

Bagaimana saya bisa membuat banyak file seperti ini?

João José
sumber
Apa yang Anda maksud dengan "eksklusif"? Itu tidak masuk akal dalam konteks, jadi Anda mungkin menggunakan kata yang salah.
Gilles 'SO- stop being evil'
Maksud saya file tidak dapat memiliki konten yang sama.
João José
Jadi, eksklusif berarti unik.
Somehume

Jawaban:

25

Karena Anda tidak memiliki persyaratan lain, sesuatu seperti ini seharusnya berfungsi:

#! /bin/bash
for n in {1..1000}; do
    dd if=/dev/urandom of=file$( printf %03d "$n" ).bin bs=1 count=$(( RANDOM + 1024 ))
done

(ini membutuhkan bashsetidaknya untuk {1..1000}).

lcd047
sumber
2
Ini perlu bashkarena berbagai alasan, termasuk $((…))dan $RANDOM. Bahkan $(…)mungkin tidak ada di setiap shell.
G-Man Mengatakan 'Reinstate Monica'
1
@ G-Man, dalam hal apa pun, tidak satu pun dari fitur tersebut yang khusus bashatau tidak berasal bash ( {1..1000}berasal dari zsh, for n in...; donedan ekspansi variabel berasal dari shell Bourne $(...),, $((...))dan $RANDOM datang ksh). Fitur yang bukan POSIX adalah {1..1000}, $RANDOMdan /dev/urandom.
Stéphane Chazelas
1
Jika Anda ingin 1..1000 menjadi lebar konstan yang Anda butuhkan "%04d"dalam hal ini bashatau zshdapat dilakukan {0001..1000}tanpaprintf
dave_thompson_085
Fitur tambahan: Saya perlu cara untuk menyebarkan file-file ini ke banyak subdirektori bersarang yang dinamai secara acak.
stu
10

Sebuah variasi dengan seq, xargs, dddan shuf:

seq -w 1 10 | xargs -n1 -I% sh -c 'dd if=/dev/urandom of=file.% bs=$(shuf -i1-10 -n1) count=1024'

Penjelasan sesuai permintaan per komentar:

seq -w 1 10mencetak urutan angka dari 01 hingga 10

xargs -n1 -I%mengeksekusi perintah sh -c 'dd ... % ...'untuk setiap nomor urut menggantikan % dengan itu

dd if=/dev/urandom of=file.% bs=$(shuf ...) count=1024membuat file-file yang diumpankan dari / dev / urandom dengan 1024 blok dengan ukuran blok

shuf -i1-10 -n1nilai acak dari 1 hingga 10

FloHimself
sumber
Apa ini tepatnya?
saruftw
1
@ saru95 penjelasan ditambahkan.
FloHimself
Ini menciptakan 10 file dengan ukuran acak. Ubah "10" ke jumlah file yang diinginkan.
Nay
2

Anda dapat melakukan sesuatu seperti ini:

#!/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
rahul
sumber
Saya mencoba melakukan ini tetapi tidak berhasil. Anda mungkin ingin menjelaskan parameternya. :)
João José
sangat cepat thx @rahul
BG Bruno
2

Ini menggunakan pipa tunggal dan tampaknya cukup cepat, tetapi memiliki batasan bahwa semua file memiliki ukuran yang sama

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

Penjelasan: Gunakan dd untuk membuat data 10240 * 1024 byte; membaginya menjadi 10240 file terpisah masing-masing 1k (nama akan dijalankan dari 'file.aaaa' melalui 'file.zzzz')

Ed Randall
sumber