cat ./* >> large.txt 大小减小

cat ./* >> large.txt 大小减小

我是 bash 脚本编写的新手。我编写了一个脚本,将不同目录中的许多文件连接成大文件

#!/bin/bash
for f in foo/$1/*; do
    if [ -d "$f" ]; then
        for d in $f/*; do
                if [ -d "$d" ]; then
                file=$( echo ${d##*/} )
                mkdir -p bar/$1/"$file"/fastq/
                cat $d/*/fastq_pass/* >> bar/$1/"$file"/fastq/$file.fastq.gz
                        fi
                done
    fi
done

我注意到一些合并文件的大小丢失了 1-2 GB,这很奇怪,因为其他文件都正常。当我尝试做的时候

cat foo/* >> bar/largefile.fastq.gz

没有损失。所以这肯定是因为我的剧本。哪里出错了?

答案1

为了提高效率,文件系统以块簇的形式分配磁盘空间。因此,“1 字节”文件将被分配整个簇。连接 100 个“1 字节”文件,生成 100 字节的数据仍然需要一个簇。

簇和块的大小可能会有所不同,性能分析有一个子领域专门用于针对特定应用程序进行优化。

相关内容