Создать файл определенного размера?

Я хочу создать файл с именем example.file . Я мог бы использовать

  touch example.file  

, но я хочу, чтобы размер файла был ровно 24 МБ. Я уже проверял man-страницу Touch, но такого параметра нет. Есть ли простой способ сгенерировать файлы определенного размера?


Вы можете использовать dd:

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

или

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

или, на Mac,

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

Под невстроенным Linux или Cygwin (или любая система с GNU coreutils) и FreeBSD:

  truncate -s 24m example.file  

Это создает файл, заполненный нулевых байтов. Если файл уже существует и меньше, он увеличивается до требуемого размера с помощью нулевых байтов. Если файл уже существует и больше, он обрезается до запрошенного размера.

Нулевые байты не занимают места на диске, файл является разреженным.

Во многих системах head -c 24m /zero> example.file создает неразреженный файл, полный нулевых байтов. Если head не имеет параметра -c в вашей системе (он распространен, но не в POSIX), вы можете использовать dd bs = 1024 КБ count = 24 /zero> example.file вместо этого (это POSIX-совместимый).

4


Если вас не волнует содержимое файла, это намного быстрее, чем использование dd :

  fallocate -l 24M filename  

Очевидно, что использование dd для файла размером 24 МБ не займет много времени в современной системе, но файлы большего размера могут работать заметно медленнее.

3


Вы можете использовать dd:

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

Или, если вы используете Solaris

  mkfile 24m outputfile.out код> 

3


  FROM_NODE = N01; эхо  ;  cd $ MOUNT_PATH;  pwd;  ls -la;  сон 1;  echo; WHEN = "$ (дата +% Y-% m-% d_% H-% M-% S)"; fallocate -l 10M $ MOUNT_PATH/"$ FROM_NODE" _ "$ WHEN" .dumpls -lha;  эхо;  

3



Как создать файл с заданным размером в Linux?

В целях тестирования мне нужно сгенерировать файл определенного размера (чтобы проверить лимит загрузки).

Что такое команда для создания файла определенного размера в Linux?


Для небольших файлов:

  dd if =/dev/zero of = upload_test bs = file_size count = 1  

Где file_size — размер ваш тестовый файл в байтах.

Для больших файлов:

  dd if =/dev/zero of = upload_test bs = 1M count = size_in_megabytes  

Пожалуйста, современные проще и быстрее. В Linux (выберите один)

  truncate -s 10G foofallocate -l 5G bar  

Для этого требуется следует указать, что truncate в файловой системе, поддерживающей разреженные файлы, создаст разреженный файл, а fallocate — нет. Разреженный файл — это файл, в котором единицы распределения, составляющие файл, не фактически выделяются, пока не будут использованы. Однако метаданные для файла будут занимать довольно много места, но, вероятно, не где-то рядом с фактическим размером файла. Вам следует обратиться к ресурсам о разреженных файлах для получения дополнительной информации, поскольку у этого типа файлов есть свои преимущества и недостатки. Не разреженный файл имеет свои блоки (единицы распределения), выделенные заранее, что означает, что пространство зарезервировано настолько, насколько его видит файловая система. Также ни fallocate , ни truncate не установят для содержимого файла указанное значение , например dd , вместо этого содержимое файла, выделенного с помощью fallocate или truncate , может быть любым значением корзины, которое существовало в выделенных блоках во время создания, и это поведение может быть, а может и не быть желанным. dd — самый медленный, потому что он фактически записывает значение или фрагмент данных во весь файловый поток, как указано в параметрах командной строки.

Это поведение потенциально может отличаться — в зависимости от используемой файловой системы и соответствия этой файловой системы любому стандарту или спецификации. Поэтому рекомендуется провести надлежащее исследование, чтобы убедиться, что используется соответствующий метод.

8


Чтобы следить за сообщением Тома, вы также можете использовать dd для создания разреженных файлов:

  dd if =/dev/zero of = the_file bs = 1 count = 0 seek = 12345  

Это создаст файл с «дырой» в нем в большинстве unix — данные фактически не будут записаны на диск и не будут занимать какое-либо пространство, пока на них не будет записано что-то отличное от нуля.

2


В OSX (и, по-видимому, в Solaris) также доступна команда mkfile :

  mkfile 10g big_file  

Это создает файл размером 10 ГБ с именем «big_file». Нашел этот подход здесь.

2


Используйте эту команду:

 dd if = $ INPUT-FILE of = $ OUTPUT-FILE bs = $ BLOCK-SIZE count = $ NUM-BLOCKS 

Чтобы создать большой (пустой) файл, установите $ INPUT-FILE =/dev/zero .
Общий размер файла будет $ BLOCK-SIZE * $ NUM-BLOCKS .
Новый созданный файл будет иметь вид $ OUTPUT-FILE .

8


Вы можете сделать это программно:

  #include  #include  #include  #include  #include  int main () {int fd = creat ("/tmp/foo.txt", 0644);  ftruncate (fd, SIZE_IN_BYTES);  закрыть (fd);  return 0;}  

Этот подход особенно полезен для последующего отображения файла в память.

используйте следующую команду, чтобы проверить, что файл имеет правильный размер:

  # du -B1 --apparent-size/tmp/foo.txt  

Будьте осторожны:

  # du/tmp/foo.txt

, вероятно, напечатает 0 , потому что он выделяется как разреженный файл, если поддерживается вашей файловой системой.

см. Также: man 2 open и man 2 truncate

0


В некоторых из этих ответов вы используете /dev/zero для источника ваших данных. Если вы тестируете скорость загрузки по сети, это может быть не лучшей идеей, если ваше приложение выполняет какое-либо сжатие, файл, полный нулей, сжимается действительно хорошо. Использование этой команды для создания файла

  dd if =/dev/zero of = upload_test bs = 10000 count = 1  

Я мог сжать upload_test примерно до 200 байт. Таким образом, вы можете поставить себя в ситуацию, когда вы думаете, что загружаете файл размером 10 КБ, но на самом деле это было бы намного меньше.

Я предлагаю использовать /dev/urandom вместо /dev/zero . Я вообще не мог сильно сжать вывод /dev/urandom .

1


вы могли бы сделать:

  [dsm @ localhost: ~] $ perl -e 'print " 0" x  100 '> filename.ext  

Где вы заменяете 100 количеством байтов, которое хотите записать.

1


  dd if =/dev/zero of = my_file. txt count = 12345  

1


Есть много ответы, но никто не объяснил, что еще можно сделать. Заглянув в справочные страницы для dd, можно лучше указать размер файла.

Это создаст/tmp/zero_big_data_file.bin, заполненный нулями, размером 20 мегабайт:

  dd if =/dev/zero of =/tmp/zero_big_data_file.bin bs = 1M count = 20  

Это собирается создать/tmp/zero_1000bytes_data_file.bin, заполненный нулями, имеющий размер 1000 байт:

  dd if =/dev/zero of =/tmp/zero_1000bytes_data_file.bin bs  = 1 КБ count = 1  

или

  dd if =/dev/zero of =/tmp/zero_1000bytes_data_file.bin bs =  1000 count = 1  

  • Во всех примерах bs — это размер блока, а count — количество блоков
  • BLOCKS и BYTES могут сопровождаться следующими мультипликативными суффиксами: c = 1, w = 2, b = 512, kB = 1000, K = 1024, MB = 1000 * 1000, M = 1024 * 1024, xM = M GB = 1000 * 1000 * 1000, G = 1024 * 1024 * 1024 и так далее для T, P, E, Z, Y.


Как команда оболочки:

  /zero head -c 1048576> вывод  


Это сгенерирует текстовый файл размером 4 МБ со случайными символами в текущем каталоге и его именем «4mb.txt». Вы можете изменить параметры для создания разных размеров и имен .

  base64/dev/urandom |  head -c 4000000> 4mb.txt  


Используйте fallocate , если вы не хотите ждать диск.

Пример:

  fallocate -l 100G  BigFile  

Использование:

  Использование: fallocate [options]  Предварительно выделить пространство для файла или освободить его.  Опции: -c, --collapse-range удалить диапазон из файла -d, --dig-Hole обнаружить нули и заменить на дыры -i, --insert-range вставить дырку в диапазон, сдвигая существующие данные -l,  --length  длина для операций с диапазоном в байтах -n, --keep-size поддерживать видимый размер файла -o, --offset  смещение для операций с диапазоном в байтах -p, --punch  -hole заменить диапазон дырой (подразумевается -n) -z, --zero-range zero и обеспечить выделение диапазона -x, --posix использовать posix_fallocate (3) вместо fallocate (2) -v, -  подробный подробный режим -h, --help отобразить это  help -V, --version отображение версии  

Оцените статью
clickpad.ru
Добавить комментарий