Comment créer un fichier (par exemple, à l'aide de la touch
commande ou d'une autre manière similaire), mais avec une taille spécifique (par exemple 14 Mo)?
Le cas d'utilisation est de tester FTP avec différentes tailles de fichiers. Si nous pouvons créer un fichier avec une taille spécifique, il sera utile de vérifier le transfert FTP, etc.
linux
command-line
fasil
la source
la source
Réponses:
Utiliser
truncate
:De
man truncate
:Remarque:
truncate
peut ne pas être disponible sur votre système, par exemple sur Mac OS X, il n'est pas installé par défaut (mais vous pouvez facilement l'installer, en utilisant macports par exemple). Dans ces cas, vous devrez peut-être utiliserdd
ou à lahead
place.la source
touch
n'est pas nécessaire cependant, vous pouvez simplement l'exécutertruncate -s 14M filename
créerafilename
directement.EDIT: Le moyen le plus simple est probablement la réponse
truncate
de Ashutosh Vishwa Bandhu , mais comme l'a souligné @ offby1, cela crée des fichiers fragmentés qui ne sont peut-être pas ce que vous voulez. Les solutions ci-dessous créent des fichiers normaux et complets.Les commandes suivantes créent un fichier de 14 Mo appelé
foo
:fallocate
(merci à @Breakthrough qui l’a suggéré dans les commentaires et a voté contre la réponse d’ Ahmed Masud ci-dessous, qui le mentionne également.)Cette commande est particulièrement impressionnante puisqu'elle est aussi rapide que
truncate
(instantanée) quelle que soit la taille du fichier souhaitée (contrairement aux autres solutions qui seront lentes pour les gros fichiers) et crée pourtant des fichiers normaux, pas des fichiers clairsemés:Créer un fichier rempli de données aléatoires
ou
Créez un fichier rempli de
\0
s:ou
Créez un fichier contenant les 14 premiers Mo de données d’un autre fichier:
Créez un fichier contenant les 14 derniers Mo de données d’un autre fichier:
Dans tous les exemples ci-dessus, le fichier sera
14*1000*1000
si vous voulez14*1024*1024
, remplacezMB
parM
. Par exemple:fallocate
traite uniquement en octets, il vous faudra donc le faire (14 * 1024 * 1024 = 14680064)la source
dd
s'il existe une approche plus simple et moins potentiellement destructive.dd
solution a une alternative non-dd.dd
commande sur la page wiki est complètement différente et ne l'utilise pas/dev/zero
. Quant à savoir siM
ouMB
est plus logique, prenez-le avec les développeurs. Les pages de manuel de head , tail et dd indiquent clairement que "MB = 1000 * 1000, M = 1024 * 1024". Cela peut être différent sur d'autres * nixes.AVERTISSEMENT
dd
écrasera silencieusement tout ce que vous avez le droit d'écrire, si vous le spécifiez de plein gré ou par accident. Assurez-vous de comprendredd
, par exemple. en lecturedd --help
, et vous ne bousillez pas vos lignes de commande dd ou vous pouvez facilement créer une perte de données irréversible - même totale .Pour commencer,
if=
est le fichier d'entrée etof=
le fichier de sortie . Vérifiez toujours que vous avez bien compris la situation avant d'exécuter la commande. :)la source
Utilisez la magie
dd
;) page de manuelcause 14MB * 1024 = 14336KB, ou:
Et vous obtiendrez un fichier output.dat de 14mb, rempli de zéros: D
la source
Cela devrait être le moyen le plus rapide de le faire:
Sinon, écrivez simplement un programme en C ou en Perl rapide et sale qui cherche la position exacte et écrit un seul octet. C'est BEAUCOUP plus rapide que de déposer des données sur les blocs.
Si vous voulez éviter les fichiers fragmentés, vous pouvez utiliser
fallocate -l <length>
depuis Linux (et éventuellement d’autres systèmes)util-linux
.Si ce n'est pas disponible et que vous avez un système compatible POSIX, vous pouvez écrire un programme rapide et sale en utilisant l'appel de la bibliothèque posix_fallocate (). posix_fallocate garantit l'allocation de la plage spécifiée, de sorte que vous n'obtiendrez pas de disque plein lors de l'utilisation ultérieure de la plage si cette dernière est renvoyée avec succès
la source
Alors que
dd
c'est la façon portable de le faire, les commandesmkfile
etxfs_mkfile
sont écrites spécifiquement à cet effet et sont plus rapides:Le problème est qu'aucune de ces commandes n'est universellement disponible. Elles ne sont donc pas adaptées à l'écriture de scripts portables. Cependant, si je le fais de manière interactive via la ligne de commande, ce sont les commandes que j'utilise.
Par défaut, ils créent des fichiers remplis à zéro et non des fichiers clairsemés (ou "troués") . Ils ont tous deux la
-n
possibilité de créer des fichiers fragmentés à la place.la source
Il y a une autre option avec Perl:
perl -e 'print "a" x 1024' > file.txt
Cela créera un fichier de 1 Ko. Remplacez 1024 par le nombre de votre choix.
la source