1つのディレクトリに現在10,804個のファイルがあります。ファイル数は5〜100,000の間です。
私は250個の個々のファイルを1つの大きなファイルにマージし、残りのファイルを1つの小さなファイルにマージする方法を探しています。たとえば、1200個のファイルがある場合は、4,250個のファイルと1,200個のファイルが必要です。
私はbashシェルを使用しています。
ベストアンサー1
配列を使用して、これを行う単純なループを作成できます。${x:s:l}
パラメータ拡張:
files=(*)
for (( i = 0; i < ${#files[@]}; i += 250 ))
do
cat -- "${files[@]:$i:250}" > "file$i.combined"
done
.
ここでは、すべての(隠されていない)ファイルを配列(語彙的にソートされたファイル名)として収集し、files
0から繰り返して250秒間のファイル数を計算します。各250に対して、ファイル名(0-249、250-499など)を引数に拡張し、cat
出力を背中に入れますfile0.combined
。file250.combined
これは伝統的なCスタイルfor
ループのBashバージョンです。とにかく、個々のループごとにループを繰り返す必要があるため、cat
複雑すぎる必要はありません。
.combined
複数のファイルが生成されます。ファイル名が拡張されたため、これらのファイルは再接続には含まれませんが、コマンドを 2 番目に実行すると接続に含まれます。これが問題であれば、他の場所に置いて削除するかlp
。