多数のファイルを単一のディレクトリに結合

多数のファイルを単一のディレクトリに結合

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

.ここでは、すべての(隠されていない)ファイルを配列(語彙的にソートされたファイル名)として収集し、files0から繰り返して250秒間のファイル数を計算します。各250に対して、ファイル名(0-249、250-499など)を引数に拡張し、cat出力を背中に入れますfile0.combinedfile250.combined

これは伝統的なCスタイルforループのBashバージョンです。とにかく、個々のループごとにループを繰り返す必要があるため、cat複雑すぎる必要はありません。

.combined複数のファイルが生成されます。ファイル名が拡張されたため、これらのファイルは再接続には含まれませんが、コマンドを 2 番目に実行すると接続に含まれます。これが問題であれば、他の場所に置いて削除するかlp

おすすめ記事