Générer un fichier d'une certaine taille?

107

Je voudrais générer un fichier avec le nom example.file. je pourrais utiliser

touch example.file

mais je veux que le fichier ait exactement 24 Mo de taille. J'ai déjà vérifié la page de manuel de touch, mais il n'y a pas de paramètre comme celui-ci. Existe-t-il un moyen simple de générer des fichiers d’une certaine taille?

R_Utilisateur
la source
Nous supposerons tous que vous ne vous souciez pas de savoir si le contenu est si rempli de zéros, ce sera bien.
Bgs

Réponses:

137

Vous pouvez utiliser dd:

dd if=/dev/zero of=output.dat  bs=24M  count=1

ou

dd if=/dev/zero of=output.dat  bs=1M  count=24

ou, sur Mac,

dd if=/dev/zero of=output.dat  bs=1m  count=24
Paul92
la source
2
... ou utilisez bs = 1M et compte = 24. Beaucoup le trouvent plus agréable et plus facile à lire.
Bgs
3
Peut-être que vous n'utilisez pas d'énormes tailles de blocs, mon système ne m'a pas plubs=1G count=1
ThorSummoner
10
Sur le Mac, utilisez 24 m (petit m), car le Mac n'aime pas le grand M.dd if=/dev/zero of=output.dat bs=24m count=1
SPRBRN le
1
Sur Android (5.1.1, pourrait (ne pas être) être spécifique à la version ou au téléphone), je devais aussi utiliser une minuscule m.
Erik
1
Quel est le problème avec les blocs de grande taille en particulier? J'avais espéré utiliser une taille de bloc 1G pour un fichier 1G.
Felwithe
43

Sous Linux ou Cygwin non intégrés (ou tout système avec GNU coreutils) et FreeBSD:

truncate -s 24m example.file

Cela crée un fichier plein d'octets nuls. Si le fichier existe déjà et est plus petit, il est étendu à la taille demandée avec des octets nuls. Si le fichier existe déjà et est plus volumineux, il est tronqué à la taille demandée.

Les octets nuls ne consomment aucun espace disque, le fichier est un fichier fragmenté .

Sur de nombreux systèmes, head -c 24m </dev/zero >example.filecrée un fichier non fragmenté rempli d'octets nuls. Si headvous n'avez pas d' -coption sur votre système (c'est courant mais pas dans POSIX), vous pouvez l'utiliser dd bs=1024k count=24 </dev/zero >example.file(c'est compatible avec POSIX).

Gilles
la source
BusyBox a aussi , si la plupart des systèmes embarqués vous aussi :-)
Ciro Santilli新疆改造中心法轮功六四事件
29

Si vous ne vous souciez pas du contenu du fichier, c'est beaucoup plus rapide que d'utiliser dd:

fallocate -l 24M filename

Évidemment, utiliser ddun fichier de 24 Mo ne prendra pas beaucoup de temps sur un système moderne, mais les fichiers plus volumineux peuvent être visiblement lents.

Sabrcher
la source
13

Vous pouvez utiliser dd:

dd if = / dev / zero of = outputfile.out bs = 1024k count = 24

Ou au cas où vous utiliseriez Solaris

mkfile 24m outputfile.out
BitsOfNix
la source
3
mkfile semble également être présent sur macOS
Ben Flynn,
Vous pouvez également passer -npour créer un fichier
fragmenté
0
FROM_NODE=N01;
echo; cd $MOUNT_PATH; pwd; ls -la; sleep 1; echo;
WHEN="$(date +%Y-%m-%d_%H-%M-%S)";
fallocate -l 10M $MOUNT_PATH/"$FROM_NODE"_"$WHEN".dump
ls -lha; echo;
Pascal Andy
la source
1
Cela ne dit-il pas 10 Mo alors que le Q en demande 24?
Jeff Schaller
2
fallocatepourrait être une bonne réponse, mais pourquoi toutes les autres lignes? Coupez votre réponse pour qu'elle réponde exactement à ce qui a été demandé et rien de plus.
JigglyNaga
1
Si vous préférez monsieur: fallocate -l 10M somefile.dump
Pascal Andy