Erstellen Sie viele Dateien mit zufälligem Inhalt

23

Ich suche nach einem Befehl, um mehrere (Tausende von) Dateien mit mindestens 1 KB zufälligen Daten zu erstellen.

Beispielsweise,

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

Wie kann ich so viele Dateien erstellen?

João José
quelle
Was meintest du mit "exklusiv"? Das ergibt im Kontext keinen Sinn, deshalb haben Sie wahrscheinlich das falsche Wort verwendet.
Gilles 'SO- hör auf böse zu sein'
Ich meinte, dass Dateien nicht den gleichen Inhalt haben können.
João José
Exklusiv hätte also einzigartig bedeutet.
Irgendwann

Antworten:

25

Da Sie keine weiteren Anforderungen haben, sollte Folgendes funktionieren:

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

(das braucht man bashzumindest für {1..1000}).

lcd047
quelle
2
Dies erfordert bashaus zahlreichen Gründen, einschließlich $((…))und $RANDOM. Auch $(…)könnte nicht in jeder Schale vorhanden sein.
G-Man sagt, dass Monica
1
@ G-Man, auf jeden Fall ist keines dieser Features spezifisch und stammt bashauch nicht von diesen bash ( {1..1000}kommt von zsh, for n in...; doneund die variable Erweiterung kommt von der Bourne-Shell $(...), $((...))und $RANDOM kommt von ksh). Die Funktionen, die nicht POSIX sind {1..1000}, sind $RANDOMund /dev/urandom.
Stéphane Chazelas
1
Wenn Sie wollten, dass 1..1000 eine konstante Breite hat, brauchen Sie "%04d"in diesem Fall bashoder zshkönnen {0001..1000}mit noprintf
dave_thompson_085
Zusätzliches Feature: Ich brauche eine Möglichkeit, diese Dateien auf viele zufällig benannte verschachtelte Unterverzeichnisse zu verteilen.
Dienstag,
10

Eine Variante mit seq, xargs, , ddund shuf:

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

Erklärung wie per Kommentar angefordert:

seq -w 1 10druckt eine Zahlenfolge von 01 bis 10

xargs -n1 -I%Führt den Befehl sh -c 'dd ... % ...'für jede Sequenznummer aus und ersetzt das % durch diese

dd if=/dev/urandom of=file.% bs=$(shuf ...) count=1024Erstellt die aus / dev / urandom gespeisten Dateien mit 1024 Blöcken mit einer Blockgröße von

shuf -i1-10 -n1ein zufälliger Wert von 1 bis 10

FloHimself
quelle
Was genau macht das?
Saruftw
1
@ saru95 Erklärung hinzugefügt.
FloHimself
Dadurch werden 10 Dateien mit zufälliger Größe erstellt. Ändern Sie "10" auf die Anzahl der gewünschten Dateien.
Nein
2

Sie können so etwas tun:

#!/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
quelle
Ich habe es versucht, aber nicht funktioniert. Vielleicht möchten Sie die Parameter erklären. :)
João José
sehr schnell danke @rahul
BG Bruno
2

Dies verwendet eine einzelne Pipeline und scheint ziemlich schnell zu sein, hat jedoch die Einschränkung, dass alle Dateien die gleiche Größe haben

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

Erläuterung: Verwenden Sie dd, um 10240 * 1024 Datenbytes zu erstellen. Teilen Sie das in 10240 separate Dateien mit jeweils 1 KB auf (die Namen werden von 'file.aaaa' bis 'file.zzzz' ausgeführt).

Ed Randall
quelle