这不是一个家庭作业问题,这是一个旧考试的问题,所以任何给出答案的人都不会导致学术不诚实。对于那些仍然持怀疑态度的人,我只是在寻找我可以为此使用什么命令。
您有一个名为 one_mb 的文件,其大小正好为 1 兆字节。您想从中创建一个大小正好为 128 兆字节的文件。请编写一个最多 9 行且没有循环、if 语句、递归或任何其他逻辑控制结构的 shell 脚本来执行此操作。每个命令(包括参数)的长度必须少于 100 个字符。
我开始研究 xarg,但想不出一个好的方法来使用它来完成这个。
假设 bash,您可以使用单行大括号扩展技巧:
cat one_mb{,}{,}{,}{,}{,}{,}{,} > 128_mb
不确定这是否重要,但我想到了:
seq 1 128 | xargs -Inone cat one_mb >> 128_mb
没有使用循环,只是一个管道和xargs
.
这里的大提示是它可以“不超过 9 行”。由于 2^7 = 128,您只需将文件大小翻倍 7 倍:
cat one_mb one_mb > two_mb
cat two_mb two_mb > four_mb
...
cat 64_mb 64_mb > 128_mb
在每个命令 100 个字符的情况下,您可以减少很多:
cat one_mb one_mb one_mb one_mb one_mb one_mb one_mb one_mb >mb8
cat mb8 mb8 mb8 mb8 >mb32
cat mb32 mb32 mb32 mb32 >mb128
rm -f mb8 mb32
dd oflag=append conv=notrunc if=/dev/zero of=one_mb bs=1MB count=127
这将保留文件内容并添加一堆“零”记录,使其达到 128 MB。做
ls -ltrh one_mb
检查它是否实际上是 128MB,否则您可能需要更改“count=127”参数。
我认为你有限制就足够了。您可以定义一个将整数作为参数的函数。如果大于 0,cat
s 文件并再次调用相同的函数,但参数减小。
然后,您只需使用所需的值调用该函数,就完成了。
很好的递归:)
(对不起,编码太懒了,还有很多其他的工作答案,只是想避免递归被遗忘:))