サイズが約2.5TBのディレクトリがあります。このディレクトリの下には、ファイルなしのサブディレクトリが3000以上あります。各サブディレクトリのサイズは非常に多様であり、一部は1MB未満、一部は15GBを超えますが、20GBを超えることはありません。このデフォルトディレクトリをそれぞれ20 GB未満のいくつかの小さなディレクトリに分割したいと思います。このソリューション確かに中間の最大記憶領域が必要です。つまり、20GBを超えない限り、すべてのファイルをアルファベット順に並べ替え、ディレクトリを追加できます。
私は答えを試しましたこれ解決策、ファイルを含むディレクトリではうまく機能しますが、サブディレクトリでは機能しません。
#!/bin/bash
directory=${1:-testdir}
sizelimit=${2:-1000} # in MB
sizesofar=0
dircount=1
du -s --block-size=1M "$directory"/* | while read -r size file
do
if ((sizesofar + size > sizelimit))
then
(( dircount++ ))
sizesofar=0
fi
(( sizesofar += size ))
mkdir -p -- "$directory/sub_$dircount"
mv -- "$file" "$directory/sub_$dircount"
done