在 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
{##}表示总块数
{#}表示当前块号
我知道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
{##}表示总块数
{#}表示当前块号