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

Как создать файл (например, с помощью команды touch или другого аналогичного способа), но с конкретным размером (например, 14 МБ)?

Вариант использования – проверить FTP с различными размерами файлов. Если мы сможем создать файл с определенным размером, вам будет полезно проверить FTP-передачу и т. Д.

  • Как я могу установить кодовую страницу командной строки в Windows 7?
  • Как быстро включить / выключить UAC, например. Используя командную строку, в Windows-7?
  • Синтаксис перенаправления пакетного сценария
  • Добавив PATH с SETX или PATHMAN или что-то еще?
  • Как вы перечисляете все процессы в командной строке в Windows?
  • Как Terminal.app обнаруживает изменение параметров терминала?
  • Как я могу проверить, включен ли режим UASP USB3.0 в Linux?
  • Что означает среднее значение загрузки для Unix / Linux?
  • Поддерживает ли Linux TRIM для SSD на LVM?
  • Ubuntu grep, find и т. Д.: Вывод «Разрешение отказано» и «Нет такого файла или каталога»
  • Клонирование SD-карты на более крупную SD-карту
  • Извлеките все Zip в каталог (включая вложенные папки) с файлом .bat или командой dos
  • 7 Solutions collect form web for “Как создать файл с определенным размером из командной строки?”

    Использовать truncate :

     truncate -s 14M filename 

    От 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 

    Примечание. truncate может быть недоступно в вашей системе, например, в Mac OS X оно не установлено по умолчанию (но вы можете легко установить его, например, с помощью macports). В этих случаях вам может потребоваться использовать dd или head .

    EDIT: Самый простой способ – это, вероятно, truncate ответа Ashutosh Vishwa Bandhu, но, как было указано @ offby1 , он создает разреженные файлы, которые могут быть не такими, какие вы хотите. Нижеприведенные решения создают нормальные, полные файлы.


    Следующие команды создают 14 МБ-файл с именем foo :

    1. fallocate (спасибо @Breakthrough, кто предложил это в комментариях и проголосовал за ответ Ахмеда Масуда ниже, который также упоминает об этом).

       fallocate -l 14000000 foo 

      Эта команда особенно впечатляет, так как она работает так же быстро, как и truncate (мгновенное) независимо от желаемого размера файла (в отличие от других решений, которые будут медленными для больших файлов) и при этом создает нормальные файлы, а не разреженные:

       $ 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. Создать файл, заполненный случайными данными

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

      или

       head -c 14MB /dev/urandom > foo 
    3. Создайте файл, заполненный \0 s:

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

      или

       head -c 14MB /dev/zero > foo 
    4. Создайте файл, заполненный первым 14 МБ данных другого файла:

       head -c 14MB bar.txt > foo 
    5. Создайте файл, заполненный последними 14 МБ данных другого файла:

       tail -c 14MB bar.txt > foo 

    Во всех приведенных выше примерах файл будет 14*1000*1000 если вы хотите 14*1024*1024 , замените MB на M Например:

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

    fallocate только в байтах, поэтому вам нужно будет делать (14 * 1024 * 1024 = 14680064)

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

    ПРЕДУПРЕЖДЕНИЕ dd будет молча перезаписывать все, что у вас есть права на запись, если вы укажете его либо добровольно, либо случайно. Убедитесь, что вы понимаете dd , например. С чтением dd --help , и вы не испортите свои командные строки dd, иначе вы можете легко создать необратимую потерю данных – даже общее .

    Для начала if= – это входной файл, а of=выходной файл . Всегда проверяйте, правильно ли вы это сделали, прежде чем запускать команду. 🙂

    Использовать магическую страницу dd 😉

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

    Причина 14MB * 1024 = 14336KB, или:

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

    И вы получите файл 14mb output.dat, заполненный нулями: D

    Это должен быть самый быстрый способ сделать это:

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

    В противном случае просто напишите быструю и грязную программу C или perl, которая ищет точную позицию и записывает один байт. Это намного быстрее, чем фактическое демпинг данных на блоки.

    Если вы хотите избежать разреженных файлов, то в Linux (и, возможно, в других системах) вы можете использовать fallocate -l <length> из util-linux .

    Если это недоступно, и у вас есть совместимая с POSIX система, вы можете написать быструю и грязную программу, используя вызов библиотеки posix_fallocate (). Posix_fallocate гарантирует выделение указанного диапазона, поэтому вы не получите полный диск при последующем использовании диапазона, если он будет успешно возвращен

    Хотя dd – это переносимый способ сделать это, команды mkfile и xfs_mkfile написаны специально для этой цели и быстрее:

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

    Ловушка заключается в том, что ни одна из команд не является общедоступной, поэтому они не подходят для написания переносимых скриптов. Однако, если я делаю это интерактивно через командную строку, это те команды, которые я использую.

    По умолчанию создайте ненулевые файлы с нулевым заполнением. Они оба берут параметр -n для создания дырявых файлов.

    Существует еще один вариант с Perl:

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

    Это создаст файл 1 КБ. Замените 1024 любым количеством, которое вам нравится.

    Давайте будем гением компьютера.