我使用以下几行将文件分割成更小的部分:
split --line-bytes=100M -d $input $output/FILENAME
echo "$input was split into ??? 100MB files." >> demo.log
之后,我需要在日志文件中写入此分割生成了多少个较小的文件。有什么办法可以做到这一点吗?
答案1
最简单的方法是将结果片段名称保存在数组中,例如
splitarr=($output/FILENAME*)
并使用 获取数组长度(元素数量)${#splitarr[@]}
。这假定唯一与该模式匹配的文件名是由该split
命令生成的文件名。
您似乎正在使用,gnu split
所以这里有一些其他方法可以做到这一点:您可以添加选项--verbose
(有关详细信息,请参阅页面),然后计算打印到man
的行并将其保存到变量中:split
stdout
ct=$(split --verbose --line-bytes=100M -d $input $output/FILENAME | wc -l)
您可以使用鲜为人知的选项获得相同的结果--filter
:
ct=$(split --filter='printf %s\\n;cat >$FILE' --line-bytes=100M -d $input $output/FILENAME | wc -l)
或者,如果您知道只有您的split
命令会在接下来的几秒钟内在该目录中创建文件,N
您可以用来inotifywatch
收集例如close_write
事件的统计信息:
inotifywatch . -t 20 -e close_write
将在接下来的 20 秒内监视当前目录中的close_write
事件,并输出如下内容:
Establishing watches...
Finished establishing watches, now collecting statistics.
total close_write filename
11 11 ./
所以这只是从表中提取该数字的问题(例如将其通过管道传输到awk 'END{print $2}'
;还要记住前两行打印在stderr
)