Rasgele içeriğe sahip birçok dosya oluşturun


23

En az 1 KB rasgele veri içeren birden fazla (binlerce) dosya oluşturma komutunu arıyorum.

Örneğin,

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

Bunun gibi birçok dosyayı nasıl oluşturabilirim?


"Özel" derken ne demek istedin? Bağlamında anlam ifade etmiyor, bu yüzden muhtemelen yanlış kelimeyi kullandın.
Gilles 'SO- kötülük'

Demek istediğim dosyalar aynı içeriğe sahip olamaz.
João José

Yani, seçkin benzersiz anlamına gelirdi.
somehume

Yanıtlar:


25

Başka gereksiniminiz olmadığından, bunun gibi bir şey işe yaramalı:

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

(Bunun bashiçin en azından ihtiyacı var {1..1000}).


2
Bu ve bashdahil birçok nedenden dolayı ihtiyaç duyuyor . Her kabuğun içinde bile bulunmayabilir . $((…))$RANDOM$(…)
G-Man

1
@ G-Man, her durumda, bu özelliklerin hiçbiri özgü bashne de mi ortaya çıktı bash ( {1..1000}gelir zsh, for n in...; doneve değişken genişleme Bourne kabuğundan gelir $(...), $((...))ve $RANDOM ksh gel). POSIX olmayan özelliklerdir {1..1000}, $RANDOMve /dev/urandom.
Stéphane Chazelas

1
Eğer 1..1000'in sabit genişlikte olmasını istiyorsanız "%04d", hangi durumda bashya zshda {0001..1000}no ile printf
yapmalısınız

Ek özellik: Bu dosyaları rastgele adlandırılmış iç içe geçmiş alt dizinlere yaymak için bir yola ihtiyacım var.
stu

10

Olan bir varyasyon seq, xargs, ddve shuf:

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

Yorum başına talep edildiği gibi açıklama:

seq -w 1 1001 ile 10 arasında bir sayı dizisi yazdırır

xargs -n1 -I%komutu yürütür sh -c 'dd ... % ...'yerine her bir sıra numarası için % bununla

dd if=/dev/urandom of=file.% bs=$(shuf ...) count=1024den beslenen dosyalar oluşturur / dev / urandom ile 1024 blok boyutlu bir bloklar

shuf -i1-10 -n11 ile 10 arasında rastgele bir değer


Bu tam olarak ne yapıyor?
saruftw

1
@ saru95 açıklama eklendi.
FloHimself

Bu rasgele boyutta 10 dosya oluşturur. İstenen dosya sayısına "10" değiştirin.
Nay

2

Böyle bir şey yapabilirsiniz:

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

Bunu yapmaya çalıştım ama işe yaramadı. Parametreleri açıklamak isteyebilirsiniz. :)
João José

çok hızlı thx @rahul
BG Bruno,

2

Bu, tek bir boru hattı kullanıyor ve oldukça hızlı görünüyor, ancak tüm dosyaların aynı boyutta olması sınırlaması var

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

Açıklama: 10240 * 1024 bayt veri oluşturmak için dd kullanın; her biri 1k olan 10240 ayrı dosyaya bölün (isimler 'file.aaaa' ile 'file.zzzz' arasında çalışır)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.