Как создать файл из терминала, повторяя набор слов бесконечно? Мне нужно создать огромный файл для разбора, размером 2-4 ГБ. В настоящее время я вручную копирую вставки строк в тот же файл, чтобы увеличить размер.
command-line
Nisheet
источник
источник
mkfifo huge.tmp; while true; do yes "a dummy line" > huge.tmp; done
?Ответы:
Есть простой способ повторить строку много раз:
приведет к тому, что out.txt будет содержать 10 000 строк со словами «у нас нет бананов».
Чтобы ограничить вывод точным числом байтов, используйте параметр
head
'-c
вместо'-n
. Например, это генерирует ровно 10 КБ текста:источник
head -c 10000
для 10 КБ вместо 10 КБhead -n 10000
строк.Я не могу рекомендовать бесконечно повторяющийся текст, но вы можете сделать ~ 2ГБ файл повторяющегося текста с помощью Python, например ...
Это напечатает «привет мир» 10 раз и создаст новую строку, и повторите это 20 000 000 раз, записав результат в файл
bigfile
. Если все ваши символы являются ASCII, то каждый из них по одному байту, поэтому рассчитайте соответственно, в зависимости от того, что вы хотите написать ...Ваш процессор может быть в собственности. У меня не хватает оперативной памяти, если я пытаюсь выполнить более 10 000 000 строк ...
Хотя я бегу за тостером
источник
Perl имеет отличный
x
оператор:Таким образом, в качестве простого решения вы можете написать свою строку несколько миллионов раз. Например, эта команда создала файл 3G:
Если вам нужно указать точный размер (в данном случае 2 ГиБ), вы можете сделать:
источник
Поместите набор слов для повторения в файл, например
source.txt
. Получите размерsource.txt
, в байтах, например:Определите размер файла назначения, например
destination.txt
, 2 ГБ или 4 ГБ или любой другой. Преобразовать размер в байтах.Разделите размер файла назначения на размер исходного файла.
bash
не может делать арифметику с плавающей запятой, но в этом случае она не нужна.Используйте
for
конструкцию, чтобы повторитьcat source.txt
операцию с результатом деления. Это будет ближайший примерный размер файла назначения, который вы можете получить повторением. Результат операции сохраняется вdestination.txt
.Например, предполагая, что
source.txt
это 30 байтов, и мы хотим создать файл размером 2 ГБ, нам нужно:Здесь я устанавливаю верхний предел
((16777216/30))
во время инициализации; Вы можете получить результат и поставить его здесь.Операция займет некоторое время; чем больше
source.txt
, тем меньше времени потребуется.источник
destination.txt
один раз для каждой итерации цикла?Вы также можете использовать
while
-loop.Пример: Содержимое
foo.txt
(это ваш источник):bar.txt
пуст (это ваш целевой файл). Теперь вы можете выполнить следующий цикл, чтобы записать содержимоеfoo.txt
несколько раз вbar.txt
:Объяснение:
stat --format "%s" bar.txt
отображает размерbar.txt
в байтах.while [ $(stat --format "%s" bar.txt) -lt 150 ]
Следующие действия будут повторяться до тех пор, пока не будет достигнут целевой размер (в данном случае 150 байтов).cat foo.txt >> bar.txt
добавить содержимоеfoo.txt
кbar.txt
источник
Сначала стреляйте по команде:
создаст файл по пути размером bs * count случайных байтов, в нашем случае 2048 * 10 = 20Kb. это может быть изменено согласно требованию.
Эта команда перенаправляет STDIN в файл, поэтому вам нужно будет ввести две строки и затем нажать Ctrl + D. Затем вам нужно будет выполнить следующую команду:
Где n - целое число Это создаст файл с 2 ^ (n + 1) строками, дублируя ваши исходные две строки. Итак, чтобы создать файл из 16 строк, вы должны сделать:
Вот еще несколько цифр, чтобы вы начали:
источник
FIFO, вероятно, то, что вы ищете. Вместо того, чтобы вызывать вашу программу с заданным файлом, вы можете привязать к ней результат команды оболочки через подстановку процесса, и программа увидит ее вывод в виде открытого текста. Преимущество здесь в том, что вы больше не ограничены дисковым пространством, поэтому вы можете получить размер файла, который был бы невозможен в противном случае, если вашей программе не нужно сначала буферизовать весь файл, а просто проанализировать его построчно. Например, используя ответ @hobbs для генерации контента:
Это дает мне файл объемом 95 гигабайт (в соответствии с wc) бесплатно в пространстве жесткого диска и практически без оперативной памяти, достаточной для буферизации того, что команда возвращает до того, как ее прочитают. Это примерно так же близко к «бесконечно», как вы собираетесь получить.
источник