Как я могу создать файл (например, используя touch
команду или другой подобный способ), но с определенным размером (например, 14 МБ)?
Вариант использования - тестирование FTP с различными размерами файлов. Если мы сможем создать файл с определенным размером, будет полезно проверить передачу по FTP и т. Д.
linux
command-line
Фазиль
источник
источник
Ответы:
Используйте
truncate
:От
man truncate
:Примечание:
truncate
может быть недоступно в вашей системе, например, в Mac OS X он не установлен по умолчанию (но вы можете легко установить его, например, с помощью macports). В этих случаях вам может понадобиться использоватьdd
илиhead
вместо.источник
touch
не нужно, хотя, вы можете просто запуститьtruncate -s 14M filename
его создастfilename
напрямую.РЕДАКТИРОВАТЬ: Самый простой способ - это, вероятно
truncate
, ответ Ашутоша Вишвы Бандху , но, как указал @ offby1 , он создает разреженные файлы, которые могут не соответствовать вашим ожиданиям . Решения ниже создают нормальные, полные файлы.Следующие команды создают файл размером 14 МБ с именем
foo
:fallocate
(спасибо @Breakthrough, который предложил это в комментариях и проголосовал за ответ Ахмеда Масуда ниже, который также упоминает его.)Эта команда особенно впечатляет, поскольку она работает
truncate
(мгновенно) независимо от желаемого размера файла (в отличие от других решений, которые будут работать медленно для больших файлов), и при этом создает обычные файлы, а не разреженные:Создать файл, заполненный случайными данными
или же
Создайте файл, заполненный
\0
s:или же
Создайте файл, заполненный первыми 14 МБ данных другого файла:
Создайте файл, заполненный последними 14 МБ данных другого файла:
Во всех приведенных выше примерах файл будет,
14*1000*1000
если хотите14*1024*1024
, заменитьMB
наM
. Например:fallocate
только сделки в байтах, так что вам придется делать (14 * 1024 * 1024 = 14680064)источник
dd
если есть более простой, менее потенциально разрушительный подход.dd
решения есть альтернатива не-dd.dd
на вики-странице совершенно другая и не используется/dev/zero
. Что касается того ,M
илиMB
более логично, возьмите его с разработчиками. На страницах руководства head , tail и dd четко указано, что «MB = 1000 * 1000, M = 1024 * 1024». Это может отличаться на других * nixes.ПРЕДУПРЕЖДЕНИЕ
dd
будет молча перезаписывать все , на что у вас есть права на запись, если вы укажете это добровольно или случайно. Убедитесь, что вы понимаетеdd
, например. с чтениемdd --help
, и вы не облажаете свои командные строки dd, иначе вы можете легко создать необратимую потерю данных - даже полную .Для начала,
if=
это входной файл иof=
является выходным файлом . Всегда проверяйте, что вы правильно поняли, прежде чем запускать команду. :)источник
Используйте магию
dd
;) Страница manпричина 14MB * 1024 = 14336KB или:
И вы получите 14 МБ файл output.dat, заполненный нулями: D
источник
Это должен быть самый быстрый способ сделать это:
В противном случае просто напишите быструю и грязную программу на C или Perl, которая ищет точную позицию и записывает один байт. Это намного быстрее, чем фактический сброс данных в блоки.
Если вы хотите , чтобы избежать разреженных файлов , то на Linux (и , возможно , другие системы) , вы можете использовать
fallocate -l <length>
сutil-linux
.Если это недоступно, и у вас есть POSIX-совместимая система, вы можете написать быструю и грязную программу, используя вызов библиотеки posix_fallocate (). posix_fallocate гарантирует выделение указанного диапазона, поэтому вы не получите заполненный диск при последующем использовании диапазона, если он вернется успешно
источник
Хотя
dd
это переносимый способ сделать это, командыmkfile
иxfs_mkfile
написаны специально для этой цели и работают быстрее:Подвох в том, что ни одна из команд не является универсально доступной, поэтому они не годятся для написания переносимых скриптов. Однако, если я делаю это интерактивно через командную строку, это те команды, которые я использую.
По умолчанию они создают заполненные нулями файлы, а не разреженные (или «дырявые») файлы . Они оба используют
-n
вместо этого возможность создания разреженных файлов.источник
Есть еще один вариант с Perl:
perl -e 'print "a" x 1024' > file.txt
Это создаст 1 КБ файл. Замените 1024 на любое число, которое вам нравится.
источник