Bash:将指定的文件连接n次,以使生成的文件长度(以字节为单位)不超过预定的数字
这就是我所能做的。请帮忙Bash:将指定的文件连接n次,以使生成的文件长度(以字节为单位)不超过预定的数字,bash,unix,concatenation,Bash,Unix,Concatenation,这就是我所能做的。请帮忙 COUNT=$(( $FILESIZE/$(stat -c %s $FILENAME) )) for i in $(seq 1 $COUNT); do cat $FILENAME; done >$RESULTFILE 如果你知道一些学习bash的有用资源,请给我一个链接。你有很多问题。首先,在每次迭代期间,您不会增加总大小,以与完成时将指示的限制进行比较。尝试: #!/bin/bash [ -f "$1" ] || { ## validate fil
COUNT=$(( $FILESIZE/$(stat -c %s $FILENAME) ))
for i in $(seq 1 $COUNT); do
cat $FILENAME;
done >$RESULTFILE
如果你知道一些学习bash的有用资源,请给我一个链接。你有很多问题。首先,在每次迭代期间,您不会增加总大小,以与完成时将指示的限制进行比较。尝试:
#!/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
#/bin/bash
[-f“$1”]|{##验证给定的文件名
printf“错误:找不到文件,用法:%s文件名。\n”“${0/*\/}”
出口1
}
fsize=$(stat-c%s“$1”)##单个文件大小
总尺寸=0##运行总尺寸
flimit=$((3*fsize))35;#设置为所需的倍数(可以作为参数)
resfile=/tmp/resfile##设置为想要的文件名
:>“$resfile”##将文件截断为0
而((总>“$resfile”
总计=$((总计+fsize))
完成
仔细看一下,如果有问题请告诉我
更简单的备选方案
除非您有充分的理由使用文件的大小,否则您可以通过连接所需的副本数量来简化脚本。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
copies=3##要重新归档的副本数
resfile=/tmp/resfile##设置为想要的文件名
:>“$resfile”##将文件截断为0
(i=0;i>“$resfile”
完成
主要问题是您的cat
在每次迭代时都只是输出到终端。改为执行此操作以迭代方式将输出附加到输出文件:
COUNT=$(( $FILESIZE/$(stat -c %s $FILENAME) ))
echo -n >$RESULTFILE
for i in $(seq 1 $COUNT); do
cat $FILENAME >>$RESULTFILE
done
OP在完成后写入输出文件。这比在while循环中更好,outputfile只需打开一次。