分割文件并了解生成了多少个文件

分割文件并了解生成了多少个文件

我使用以下几行将文件分割成更小的部分:

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的行并将其保存到变量中:splitstdout

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

相关内容