9

这不是一个家庭作业问题,这是一个旧考试的问题,所以任何给出答案的人都不会导致学术不诚实。对于那些仍然持怀疑态度的人,我只是在寻找我可以为此使用什么命令。

您有一个名为 one_mb 的文件,其大小正好为 1 兆字节。您想从中创建一个大小正好为 128 兆字节的文件。请编写一个最多 9 行且没有循环、if 语句、递归或任何其他逻辑控制结构的 shell 脚本来执行此操作。每个命令(包括参数)的长度必须少于 100 个字符。

我开始研究 xarg,但想不出一个好的方法来使用它来完成这个。

4

6 回答 6

18

假设 bash,您可以使用单行大括号扩展技巧:

cat one_mb{,}{,}{,}{,}{,}{,}{,} > 128_mb
于 2013-03-20T03:01:53.040 回答
11

不确定这是否重要,但我想到了:

seq 1 128 | xargs -Inone cat one_mb >> 128_mb

没有使用循环,只是一个管道和xargs.

于 2013-03-20T03:02:35.783 回答
4

这里的大提示是它可以“不超过 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
于 2013-03-20T02:54:50.400 回答
4

在每个命令 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
于 2013-03-20T03:01:25.730 回答
2
dd oflag=append conv=notrunc if=/dev/zero of=one_mb bs=1MB count=127

这将保留文件内容并添加一堆“零”记录,使其达到 128 MB。做

ls -ltrh one_mb

检查它是否实际上是 128MB,否则您可能需要更改“count=127”参数。

于 2013-03-20T03:06:33.480 回答
-1

我认为你有限制就足够了。您可以定义一个将整数作为参数的函数。如果大于 0,cats 文件并再次调用相同的函数,但参数减小。

然后,您只需使用所需的值调用该函数,就完成了。

很好的递归:)

(对不起,编码太懒了,还有很多其他的工作答案,只是想避免递归被遗忘:))

于 2013-03-20T03:14:43.027 回答