如何按大小拆分大目录?

如何按大小拆分大目录?

我有一个大小约为 2.5 TB 的目录。该目录下有3000多个子目录,没有任何文件。每个子目录的大小差异很大,有的小于 1 MB,有的超过 15 GB,但没有一个超过 20 GB。我想将这个主目录分成许多较小的目录,每个目录小于 20 GB。这个解决方案才不是需要中等最大存储,这意味着,它可以按字母顺序对所有文件进行排序,并添加目录,只要不超过 20 GB。

我已经尝试过答案解决方案,虽然它对于包含文件的目录非常有效,但在存在子目录的情况下不起作用。

#!/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 

相关内容