Wygenerować plik o określonym rozmiarze?

106

Chciałbym wygenerować plik o nazwie example.file. mógłbym użyć

touch example.file

ale chcę, aby plik miał dokładnie 24 MB. Już sprawdziłem stronę dotykową, ale nie ma takiego parametru. Czy istnieje prosty sposób na generowanie plików o określonym rozmiarze?

R_User
źródło
Wszyscy założymy, że nie obchodzi Cię, jaka zawartość jest wypełniona zerami, będzie dobrze.
Bgs

Odpowiedzi:

136

Możesz użyć dd:

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

lub

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

lub na Macu

dd if=/dev/zero of=output.dat  bs=1m  count=24
Paul92
źródło
2
... lub użyj bs = 1M i zlicz = 24. Wielu uważa, że ​​jest ładniejszy i łatwiejszy do odczytania.
Bgs
3
Może nie używam dużych rozmiarów bloków, mój system nie lubiłbs=1G count=1
ThorSummoner
10
Na komputerze Mac użyj 24 m (mały m), ponieważ Mac nie lubi dużego M.dd if=/dev/zero of=output.dat bs=24m count=1
SPRBRN
1
Na Androidzie (5.1.1, może (nie) być zależna od wersji lub telefonu) musiałem również używać małych liter m.
Erik,
1
Na czym polega problem w przypadku dużych bloków? Miałem nadzieję, że użyję rozmiaru bloku 1G dla pliku 1G.
felwithe
43

W niewbudowanym systemie Linux lub Cygwin (lub dowolnym systemie z rdzeniami GNU) i FreeBSD:

truncate -s 24m example.file

Spowoduje to utworzenie pliku pełnego pustych bajtów. Jeśli plik już istnieje i jest mniejszy, zostaje rozszerzony do żądanego rozmiaru o zerowych bajtach. Jeśli plik już istnieje i jest większy, zostaje obcięty do żądanego rozmiaru.

Puste bajty nie zajmują miejsca na dysku, plik jest plikiem rzadkim .

W wielu systemach head -c 24m </dev/zero >example.filetworzy nieskomplikowany plik pełen pustych bajtów. Jeśli headnie ma -copcji w twoim systemie (jest to powszechne, ale nie w POSIX), możesz użyć dd bs=1024k count=24 </dev/zero >example.filezamiast tego (jest to zgodne z POSIX).

Gilles
źródło
BusyBox też to ma , więc większość systemów wbudowanych też :-)
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
29

Jeśli nie zależy Ci na zawartości pliku, jest to znacznie szybsze niż użycie dd:

fallocate -l 24M filename

Oczywiście użycie dddo pliku 24 MB nie zajmie więcej czasu w nowoczesnym systemie, ale większe pliki mogą być zauważalnie wolne.

SArcher
źródło
13

Możesz użyć dd:

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

Lub w przypadku korzystania z Solaris

mkfile 24m outputfile.out
BitsOfNix
źródło
3
Wydaje się, że mkfile jest także obecny w systemie macOS
Ben Flynn
Możesz także przejść -ndo utworzenia rzadkiego pliku
Russbishop
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
źródło
1
Czy nie oznacza to 10 megapikseli, podczas gdy Q prosi o 24?
Jeff Schaller
2
fallocatemoże być dobrą odpowiedzią, ale dlaczego wszystkie inne linie? Wytnij swoją odpowiedź, aby spełniała wszystkie wymagania i nic więcej.
JigglyNaga,
1
Jeśli pan woli: fallocate -l 10M somefile.dump
Pascal Andy