
私は初めてbashスクリプトに触れました。異なるディレクトリにある多くのファイルを1つの大きなファイルにリンクするスクリプトを作成しました。
#!/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バイトのデータを生成するには、まだ1つのクラスタが必要です。
クラスターとブロックサイズはさまざまで、パフォーマンス分析には特定のアプリケーション最適化専用のサブフィールドがあります。