Bash 如何创建用固定字符串初始化的固定大小文件?

Bash 如何创建用固定字符串初始化的固定大小文件?,bash,shell,Bash,Shell,我想创建一个固定大小的文件,其中填充了我选择的重复字符串 到目前为止,我已尝试使用dd创建一个文件,如下所示: dd if=/dev/urandom of=foo_200kb bs=1024 count=200 但显然,文件的内容是随机的。如何用我选择的字符串填充文件 注意: 接受的答案很好,但是对于使用busybox shell(ash)的人来说 他们可以运行以下命令以获得类似的结果 yes foo | tr-d'\n'| dd of=foo|u 200kb bs=1024 count=20

我想创建一个固定大小的文件,其中填充了我选择的重复字符串

到目前为止,我已尝试使用
dd
创建一个文件,如下所示:

dd if=/dev/urandom of=foo_200kb bs=1024 count=200
但显然,文件的内容是随机的。如何用我选择的字符串填充文件

注意: 接受的答案很好,但是对于使用busybox shell(ash)的人来说 他们可以运行以下命令以获得类似的结果


yes foo | tr-d'\n'| dd of=foo|u 200kb bs=1024 count=200
您可以使用进程替换:

dd if=<(yes foo) of=foo_200kb bs=1024 count=200

ddif=您可以创建一个bash脚本来执行您需要的操作:

#! /bin/bash
word=$1
size=$2
length=${#word}
(( remainder = size % length ))
if (( remainder )) ; then
    echo Warning: Truncating the last word >&2
fi

(( repeat = size / length ))
for (( i=0; i < repeat ; i++ )) ; do
    echo -n "$word"
done
echo -n ${word:0:remainder}
#/bin/bash
word=$1
大小=$2
长度=${word}
((余数=尺寸%长度))
如果((余数));然后
回显警告:截断最后一个单词>&2
fi
((重复=尺寸/长度))
(i=0;i

使用
fill.sh bar 204800>foo调用它
您可以将大括号扩展与
printf
head一起使用:

$ printf '%.0sbar' {1..100000} | head -c 200000 > foo
$ wc -c foo
200000 foo

我当然更喜欢
dd
解决方案。

正是我想要的,但我不知道“是”何时/如何停止?
yes
添加了不需要的内容newlines@AnkurTank当执行
dd
命令时,它将关闭正在读取的管道,因此
yes
命令将收到
SIGPIPE
信号,威尔terminate@choroba如果不需要换行符,可以使用
tr
删除它们,例如