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