it-swarm.com.de

Wie kann ich eine Datei mit einer bestimmten Größe über eine Befehlszeile erstellen?

Wie kann ich eine Datei erstellen (z. B. mit dem Befehl touch oder auf eine ähnliche Weise), aber mit einer bestimmten Größe (z. B. 14 MB)?

Der Anwendungsfall besteht darin, FTP mit verschiedenen Dateigrößen zu testen. Wenn wir eine Datei mit einer bestimmten Größe erstellen können, ist es hilfreich, die FTP-Übertragung usw. zu überprüfen.

123
fasil

Benutze truncate :

truncate -s 14M filename

Von man truncate:

DESCRIPTION
   Shrink or extend the size of each FILE to the specified size

[...]

 -s, --size=SIZE
          set or adjust the file size by SIZE

Hinweis: truncate ist möglicherweise nicht auf Ihrem System verfügbar, z. Unter Mac OS X wird es nicht standardmäßig installiert (Sie können es jedoch problemlos installieren, z. B. mithilfe von Macports). In diesen Fällen müssen Sie möglicherweise stattdessen dd oder head verwenden.

157

BEARBEITEN: Der einfachste Weg ist wahrscheinlich die truncate von Ashutosh Vishwa Bandhu Antwort , aber wie durch @ offby1 hervorgehoben, die spärliche Dateien erzeugt, die möglicherweise nicht das sind, was Sie wollen. Die folgenden Lösungen erstellen normale, vollständige Dateien.


Mit den folgenden Befehlen wird eine 14-MB-Datei mit dem Namen foo erstellt:

  1. fallocate (danke an @Breakthrough , der es in den Kommentaren vorgeschlagen und Ahmed Masuds Antwort unten erwähnt hat.)

    fallocate -l 14000000 foo
    

    Dieser Befehl ist besonders eindrucksvoll, da er unabhängig von der gewünschten Dateigröße so schnell wie truncate (augenblicklich) ist (im Gegensatz zu den anderen Lösungen, die für große Dateien langsam sind) und dennoch normale Dateien erstellt, keine spärlichen:

    $ truncate -s 14MB foo1.txt 
    $ fallocate -l 14000000 foo2.txt 
    $ ls -ls foo?.txt 
        0 -rw-r--r-- 1 terdon terdon 14000000 Jun 21 03:54 foo1.txt
    13672 -rw-r--r-- 1 terdon terdon 14000000 Jun 21 03:55 foo2.txt
    
  2. Erstellen Sie eine Datei mit zufälligen Daten

    dd if=/dev/urandom of=foo bs=14MB count=1
    

    oder

    head -c 14MB /dev/urandom > foo
    
  3. Erstellen Sie eine Datei, die mit \0s gefüllt ist:

    dd if=/dev/zero of=foo.txt bs=14MB count=1
    

    oder

    head -c 14MB /dev/zero > foo
    
  4. Erstellen Sie eine Datei mit den ersten 14 MB Daten einer anderen Datei:

    head -c 14MB bar.txt > foo
    
  5. Erstellen Sie eine Datei mit den letzten 14 MB Daten einer anderen Datei:

    tail -c 14MB bar.txt > foo
    

In allen obigen Beispielen lautet die Datei 14*1000*1000. Wenn Sie 14*1024*1024 möchten, ersetzen Sie MB durch M. Zum Beispiel:

dd if=/dev/urandom of=foo bs=14M count=1
head -c 14M /dev/zero > foo

fallocate befasst sich nur mit Bytes, Sie müssten also (14 * 1024 * 1024 = 14680064)

fallocate -l 14680064 foo
99
terdon
dd bs=1MB count=14 if=/dev/zero of=<yourfilename>

WARNINGdd überschreibt stillschweigend alles , zu dem Sie das Recht haben, zu schreiben, wenn Sie es freiwillig oder versehentlich angeben. Stellen Sie sicher, dass Sie dd verstehen, z. Wenn Sie dd --help lesen und Ihre dd-Befehlszeilen nicht kaputt machen, können Sie leicht irreversiblen Datenverlust verursachen - sogar total .

Für den Start ist if= die Eingabedatei und of= ist die Ausgabedatei . Immer Überprüfen Sie, ob Sie alles richtig gemacht haben, bevor Sie den Befehl ausführen. :)

21
n611x007

Verwende magic dd;) man page

$ dd if=/dev/zero of=output.dat  bs=1024  count=14336

verursachen 14 MB * 1024 = 14336 KB, oder:

$ dd if=/dev/zero of=output.dat  bs=1MB  count=14

Und Sie werden 14 MB output.dat-Datei erhalten, gefüllt mit Nullen: D

13
mirkobrankovic

Dies sollte der schnellste Weg sein:

SEEK=$SIZE-1
dd if=/dev/zero of=outfile bs=1 seek=$SEEK count=1 

Andernfalls schreiben Sie einfach ein schnelles und unsauberes C- oder Perl-Programm, das die exakte Position sucht und ein einzelnes Byte schreibt. Dies ist eine Menge schneller als das eigentliche Ablegen von Daten auf die Blöcke.

Wenn Sie spärliche Dateien vermeiden möchten, können Sie unter Linux (und möglicherweise auf anderen Systemen) fallocate -l <length> von util-linux verwenden.

Wenn dies nicht verfügbar ist und Sie ein POSIX-kompatibles System haben, können Sie mit dem Bibliotheksaufruf posix_fallocate () ein schnelles und unsauberes Programm schreiben. posix_fallocate garantiert die Zuweisung des angegebenen Bereichs, sodass Sie bei einer späteren Verwendung des Bereichs keinen vollen Datenträger erhalten, wenn er erfolgreich zurückgegeben wird

8
Ahmed Masud

Während dd die übertragbare Methode ist, sind die Befehle mkfile und xfs_mkfile speziell für diesen Zweck geschrieben und schneller:

mkfile size[b|k|m|g] filename
xfs_mkfile size[b|k|m|g] filename

Der Haken ist, dass keiner der Befehle universell verfügbar ist und sich daher nicht zum Schreiben von portablen Skripten eignet. Wenn ich es jedoch interaktiv über die Befehlszeile mache, sind dies die Befehle, die ich verwende.

Standardmäßig erstellen sie null gefüllte Dateien und keine spärlichen (oder "löchrigen") Dateien . Beide verwenden die Option -n, um stattdessen Sparse-Dateien zu erstellen.

6
Old Pro

Es gibt eine andere Option mit Perl:

Perl -e 'print "a" x 1024' > file.txt

Dadurch wird eine 1-KB-Datei erstellt. Ersetzen Sie 1024 durch eine beliebige Zahl.

1
Majid Azimi