在 Linux Split 中如何知道拆分后的文件总数

How do I know the total number of files after splitting in Linux Split

我知道Linux Split可以按文件大小拆分大文件,结果是numeric suffix

split -b 1G -d filepath suffix"

# result
suffix01  suffix02 ...

但我希望能够在其中获得总的拆分结果并将其用于拆分文件,比如five files,我希望结果如下

suffix5-01  suffix5-02 suffix5-03 suffix5-04 suffix5-05

虽然您可以使用 du 等其他方法来获取总文件大小,但我不知道拆分是否基于 du 获取的大小,这不是一种优雅的方式做吧。

那么,有没有一个完美的方案可以达到想要的效果呢?

为了得到你指定格式的分割文件,你可以使用这个:

split -b 1G -d filepath suffix-

然后,获取拆分文件的个数:

ls | grep suffix- | wc -l

如果你想得到每个分割文件的大小:

for i in $(find . -name 'suffix-*'); do
  echo "$i has size: $(stat --format '%s' $i)B"
done

这将为您提供以字节表示的每个文件的大小。以 KB 为单位打印结果:

for i in $(find . -name 'suffix-*'); do
  echo "$i has size: $(expr $(stat --format '%s' $i) / 1024)KB"
done

此外,如果您希望对输出进行排序并从结果中删除字符'./',您可以使用:

for i in $(find . -name 'suffix-*'); do
  echo "$i has size: $(expr $(stat --format '%s' $i) / 1024)KB"
done | sort | cut -c3-

您可以使用 GNU Parallel

首先创建一个 10MB 的文件来处理:

dd if=/dev/zero bs=10240 count=1024 > data.bin

现在拆分为 1MB 的块,为每个块命名 suffix{TOTALCHUNKS}-{CHUNKNUMBER}

parallel --recend '' --plus --pipepart --block 1M cat \> suffix{##}-{#} :::: data.bin

结果

-rw-r--r--     1 mark  staff   1048576  9 Aug 16:57 suffix10-1
-rw-r--r--     1 mark  staff   1048576  9 Aug 16:57 suffix10-2
-rw-r--r--     1 mark  staff   1048576  9 Aug 16:57 suffix10-3
-rw-r--r--     1 mark  staff   1048576  9 Aug 16:57 suffix10-4
-rw-r--r--     1 mark  staff   1048576  9 Aug 16:57 suffix10-5
-rw-r--r--     1 mark  staff   1048576  9 Aug 16:57 suffix10-6
-rw-r--r--     1 mark  staff   1048576  9 Aug 16:57 suffix10-7
-rw-r--r--     1 mark  staff   1048576  9 Aug 16:57 suffix10-8
-rw-r--r--     1 mark  staff   1048576  9 Aug 16:57 suffix10-9
-rw-r--r--     1 mark  staff   1048576  9 Aug 16:57 suffix10-10

备注:

  • 您需要 --recend '' 才能停止 GNU Parallel 尝试在换行符上拆分您的文件

  • 您需要 --plus 以便 {##} 设置为作业总数

  • 您需要 --pipepart 以使其在可搜索文件上更快 - 如果您的文件不可搜索,请改用 --pipe

  • {##}表示总块数

  • {#}表示当前块号