仅用一行创建特定长度的随机文件

仅用一行创建特定长度的随机文件

我想创建一个文件(随机内容),但其中只有一行 1 MB 的大行

我尝试过使用这个命令,但它不起作用:

head -n 1 -c 1m /dev/urandom > /sdcard/file.txt 

怎样做才正确呢?
我只想要一个包含随机 1 MB 数据但仅在一行中的文件。

答案1

{ tr -d '\n' </dev/urandom | head -c 1m; printf '\n'; } >/sdcard/file.txt

假设 GNU head,这将从其中没有任何换行符的情况下获取一兆字节(很可能是二进制的,不可打印的)数据/dev/urandom,然后在末尾添加换行符。输出将保存到/sdcard/file.txt.这一“行”不是正确的文本行,因为它很可能包含空字节。

如果您只想要字母数字数据,

{ tr -dc '[:alnum:]' </dev/urandom | head -c 1m; printf '\n'; } >/sdcard/file.txt

这将从 的随机流中删除所有非字母数字字符/dev/urandom,将其截断为 1 MB,然后像以前一样添加换行符。

答案2

  • 阅读自/dev/urandom.
  • 过滤掉您不想在行中出现的字符,例如换行符、空字节、任何其他控制字符等。
  • 在所需的字节数或字符数处停止。
  • 添加换行符。

例如,要拥有 1,000,000 个 ASCII 可打印字符:

{ </dev/urandom \
  LC_ALL=C tr -dc ' -~' |
  head -c 1000000 &&
  echo
} >/sdcard/file.txt 

相关内容