ファイルリストを生成し、それぞれX MBのファイルの2つのリストに切り捨てます。

ファイルリストを生成し、それぞれX MBのファイルの2つのリストに切り捨てます。

特定のディレクトリ内のすべてのファイルのリストを生成し、それぞれ一定量のファイルデータを含む X リストに切り捨てる必要があります。

たとえば、95 GB のデータがあります。

  • ファイルリストを生成する(total.txt
  • 3つのリストに分割total.txt:
    1. slice1.txt最初の35GBのファイルのリストを含む
    2. slice2.txt以下の35GBのファイルのリストを含む
    3. slice3.txt残りのファイルのリストを含む

何かヒントはありますか? Google で検索したり、find、awk、grep を試してみたりしましたが、このタスクは私の能力を超えているようです。

答え1

ぜひ使ってみてくださいスプリットファイルを分離するコマンド:

split total.txt -b 4444160

上記はtotal.txt35 GB のファイルに分割されます。

答え2

while read filename; do cat $filename; done < total.txt | split -b 35G - slice

これにより、「sliceaa」、「sliceab」、「sliceac」が作成され、名前を変更できます。

他の実装ではsplit、あなたは言う必要があるかもしれません-b 35000m

bashをお持ちの場合は、次のように記述できます。

cat $(< total.txt) | split -b 35G - slice

ファイル名が数百または数千あるわけではないと想定します。

作成するにはtotal.txt

files=(*)
printf "%s\n" "${files[@]}" > total.txt

関連情報