Answers:
有一种简单的方法可以重复很多行:
yes we have no bananas | head -n 10000 > out.txt
将导致out.txt包含10,000行,全部显示“我们没有香蕉”。
要将输出限制为确切的字节数,请使用head
的-c
选项代替-n
。例如,这恰好生成10 kB的文本:
yes we have no bananas | head -c 10000 > out.txt
head -c 10000
10 kB而不是head -n 10000
10k行即可。
我不建议无限重复文本,但是您可以像这样用Python制作一个〜2GB的重复文本文件...
python3 -c 'with open("bigfile", "w") as f: f.write(("hello world "*10+"\n")*2*10**7)'
这将打印“ hello world” 10次并换行,并重复该操作20,000,000次,并将结果写入文件bigfile
。如果您所有的字符都是ASCII,那么每个字符都是一个字节,因此请根据要编写的内容进行适当的计算...
您的CPU可能是拥有的。如果我尝试执行超过10,000,000行,则会用完RAM ...
我虽然正在烤面包机
Perl具有漂亮的x
运算符:
$ perl -e 'print "foo\n" x 5'
foo
foo
foo
foo
foo
因此,作为一个简单的解决方案,您只需编写几百万行即可。例如,此命令创建了一个3G文件:
perl -e 'print "This is my line\n" x 200000000' > file
如果您需要指定确切的大小(在这种情况下为2 GiB),则可以执行以下操作:
perl -e 'use bytes; while(length($str)<2<<20){ $str.="This is my line\n"} print "$str\n"' > file
将要重复的单词集放入文件中,例如source.txt
。获取的大小(source.txt
以字节为单位),例如:
stat -c '%s' source.txt
确定目标文件的大小,例如destination.txt
2 GB或4 GB或其他大小。转换大小(以字节为单位)。
将目标文件大小除以源文件大小。 bash
不能执行浮点运算,但是在这种情况下不需要。
使用for
构造重复cat source.txt
运算除法结果次数。这将是您可以通过重复操作获得的目标文件大小的最接近的近似值。操作的输出保存在中destination.txt
。
例如,假设source.txt
大小为30个字节,并且我们想创建2 GB的文件,则需要:
for ((i=0; i<=((16777216/30)); i++)); do cat source.txt; done >destination.txt
在这里,我((16777216/30))
在初始化时设置上限;您可以获得结果并将其放在这里。
该操作将花费一些时间;越大source.txt
,所需的时间就越少。
destination.txt
每次循环迭代都打开和关闭一次吗?
您也可以使用while
-loop。
示例:的内容foo.txt
(这是您的来源):
foo
bar
foobar
bar.txt
为空(这是您的目标文件)。现在,您可以执行以下循环将foo.txt
多次内容写入bar.txt
:
while [ $(stat --format "%s" bar.txt) -lt 150 ]
do
cat foo.txt >> bar.txt
done
说明:
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
首先执行命令:
dd if=/dev/urandom of=file.txt bs=2048 count=10
将在大小为bs * count个随机字节的路径上创建一个文件,在本例中为2048 * 10 = 20Kb。可以根据要求进行更改。
cat - > file.txt
该命令将STDIN重定向到文件,因此您需要输入两行,然后按Ctrl + D。然后,您将需要运行以下命令:
for i in {1..n}; do cat file.txt file.txt > file2.txt && mv file2.txt file.txt; done
其中n是整数。通过复制原来的两行,将创建一个包含2 ^(n + 1)行的文件。因此,要创建一个包含16行的文件,您可以执行以下操作:
for i in {1..3}; do cat file.txt file.txt > file2.txt && mv file2.txt file.txt; done
以下是一些可以帮助您入门的数字:
n=15 will give you 65536 lines (if the original two lines were 'hello' and 'world' the file will be 384Kb)
n=20 will give you 2097152 lines (12Mb file with 'hello' and 'world' as the two starting lines)
n=25 will give you 67108864 lines (384Mb file with 'hello' and 'world' as the two starting lines)
FIFO可能就是您想要的。您可以通过进程替换将shell命令的结果绑定到该文件,而不用给定的文件调用程序,该程序会将其输出视为纯文本文件。这样做的好处是,您不再受磁盘空间的限制,因此您可以达到文件大小,否则,只要程序不需要先缓冲整个文件即可,并且只需逐行解析即可。例如,使用@hobbs的回复生成内容:
wc -c <(yes we have no bananas | head -n 5000000000)
这给我借了一个95 GB的文件(根据wc),而没有占用HDD空间,几乎没有任何RAM,仅足以缓冲该命令在读取之前返回的内容。这几乎与您将要获得的“无限”接近。