Я нашел способ сделать это в Windows
echo "This is just a sample line appended to create a big file. " > dummy.txt
for /L %i in (1,1,21) do type dummy.txt >> dummy.txt
http://www.windows-commandline.com/how-to-create-large-dummy-file/
Есть ли способ в UNIX скопировать файл, добавить, а затем повторить процесс? Что то типа for .. cat file1.txt > file1.txt
?
for i in {1..1000000};do echo "string" >> file;done
в баш.type file >> file
запустить в бесконечном цикле (по крайней мере, как только он станет достаточно большим, чтобы не помещаться в буфер).Ответы:
С
csh
/tcsh
:С
zsh
:В системах GNU см. Также:
Или:
(создает разреженный файл 10 ТБ (очень большой, но не занимает места на диске)) и другие альтернативы, обсуждаемые в разделе «Создание тестового файла с большим количеством нулевых байтов» .
Делать
cat file >> file
было бы плохой идеей.Во-первых, он не работает с некоторыми
cat
реализациями, которые отказываются читать файлы, совпадающие с их выходным файлом. Но даже если вы обойдете его, выполнивcat file | cat >> file
, еслиfile
он больше, чемcat
внутренний буфер, это приведетcat
к выполнению бесконечного цикла, так как это приведет к чтению данных, которые он записал ранее.В файловых системах, поддерживаемых ротационным жестким диском, это также будет довольно неэффективно (после достижения размера, превышающего размер, который может быть кэширован в памяти), поскольку накопителю потребуется перемещаться назад и вперед между тем местом, где следует читать данные, а это где это написать.
источник
dd if=/dev/zero of=large-file bs=1024 count=1024
для файла размером 1dd if=/dev/zero of=test bs=1M count=1
более понятным.dd
, но я никогда не понимал, почему. На самом деле, я думаю, что когда-либо использовал его только для чтения MBR или подобных дополнительных задач. По моему опыту, другие инструменты быстрее, проще и безопаснее для подавляющего большинства случаев, когда люди используютdd
. Я думаю, что это один из тех случаев, когда часто! = Оптимальный, какsudo su
илиcat file | grep foo
.Вы можете создать большой файл в Solaris, используя:
Еще один способ, который работает на Solaris (и Linux):
Также можно использовать:
источник
truncate
существует в Солярисе 11.2+Самый быстрый способ создать большой файл в системе Linux
fallocate
:fallocate
манипулирует файловой системой и фактически не записывает данные в сектора данных по умолчанию, и поэтому является чрезвычайно быстрым. Недостатком является то, что он должен быть запущен от имени пользователя root.Выполняя его последовательно в цикле, вы можете заполнить самую большую файловую систему за считанные секунды.
Из
man fallocate
источник
Это будет продолжаться, пока вы не нажмете CTRL-C:
yes This is stuff that I want to put into my file... >> dummy.txt
Будьте осторожны, потому что вы можете получить сотни тысяч строк в секунду ...
От
man yes
:источник
yes $BIG_STRING | head -c $TARGET_SIZE >> dummy.txt
позволит вам получить точную сумму. (-n $ TARGET_NUMBER_OF_LINES).yes
будет автоматически умирать в результате «сломанной трубы», когдаhead
завершится, потому что целевое число было достигнуто.Если я вас правильно понимаю, вы ищете что-то вроде:
Это создаст файл с 22 повторениями «тестовой строки». Если вам нужен файл определенного размера, вы можете использовать что-то вроде этого (в Linux). 1024 - это один килобайт:
Лично, когда я хочу создать большой файл, я использую два файла и перекладываю один в другой. Вы можете повторять процесс, пока не достигнете желаемого размера (1 МБ здесь):
Обратите внимание, что это решение часто будет превышать желаемый размер, потому что, если размер файла ниже предела, все будет загружено в него снова.
Наконец, если все, что вам нужно, это файл нужного размера и вам не нужно, чтобы он действительно содержал что-либо, вы можете использовать
truncate
:источник
cat
у файла какое-то преимущество перед простым добавлением? Казалось бы, это заняло бы больше времени, так как пришлось бы обрабатывать два процесса в каждом цикле, а также перемещать все содержимое несколько раз.cat
Подход намного быстрее. Это имеет смысл только для создания огромных файлов, но это создало файл 545M за 10 секунд на моей машине. Тот жеwhile
цикл сecho "test line" >> file
созданием файла 96K за то же время.truncate
вокруг, вы можетеtruncate -s 1G
создать файл в первую очередь. unix.stackexchange.com/a/269184/85549 . Вы можете заменить его наhead -c $DESIRED_SIZE
, возможно, внутриwhile
цикла.По конвейеру содержимого ,
/dev/urandom
чтобыhead
можно перенаправить вывод в файл, так что :Даст вам файл с 100 байтами мусора.
источник
Тот же эффект от вашего скрипта Windows, но в Bash, вы не можете объединить файл непосредственно к себе.
источник
.txt
, что вы забыли расширение, в конце вы оставляете 2 больших файла.