这就是我能做的一切。请帮忙。
COUNT=$(( $FILESIZE/$(stat -c %s $FILENAME) ))
for i in $(seq 1 $COUNT); do
cat $FILENAME;
done >$RESULTFILE
如果您了解一些学习bash的有用资源,请给予链接。
答案 0 :(得分:1)
你有很多问题。首先,您不是在每次迭代期间递增总大小,以便与您的限制进行比较,该限制将指示您何时完成。尝试:
#!/bin/bash
[ -f "$1" ] || { ## validate filename given
printf "error: file not found., usage: %s filename.\n" "${0/*\/}"
exit 1
}
fsize=$(stat -c %s "$1") ## single file size
total=0 ## running total size
flimit=$((3 * fsize)) ## set to desired multiple (can take as argument)
resfile=/tmp/resfile ## set to wanted filename
:> "$resfile" ## truncate file to 0
while ((total < flimit)); do ## loop while total < flimit
cat "$1" >> "$resfile"
total=$((total + fsize))
done
仔细看看,如果您有疑问,请告诉我。
更简单的替代
除非您有一些令人信服的理由使用文件大小,否则只需连接所需的副本数即可简化脚本。 e.g:
copies=3 ## number of copies to resfile
resfile=/tmp/resfile ## set to wanted filename
:> "$resfile" ## truncate file to 0
for ((i = 0; i < copies; i++)); do
cat "$1" >> "$resfile"
done
答案 1 :(得分:-1)
主要问题是您的cat
只是在每次迭代时输出到终端。这样做是为了迭代地将输出附加到输出文件:
COUNT=$(( $FILESIZE/$(stat -c %s $FILENAME) ))
echo -n >$RESULTFILE
for i in $(seq 1 $COUNT); do
cat $FILENAME >>$RESULTFILE
done