【问题标题】:Script to Move Directory by Combined Size按组合大小移动目录的脚本
【发布时间】:2021-08-26 18:00:16
【问题描述】:

在一个主目录下,例如/media/date/ 有一堆像这样的子文件夹:

/media/date/resource1/a-lot-of.files

/media/date/resource2/a-lot-of.files

/media/date/resource3/a-lot-of.files

我想要一个脚本或命令来扫描每个 resource 级别文件夹的大小,然后将它们一起移动到 /media/date/1-fold/resouceX, resourceY 下,直到达到 ~1TB。然后它将下一批移动到一个新文件夹,如2-fold

我想到了dfmv,但不知道如何从那里继续。欢迎任何意见!

【问题讨论】:

    标签: bash directory


    【解决方案1】:
    src_path="/media/date/resource"
    dest_path="/media/date/dir"
    dir_suffix="0"
    curr_total="0"
    ONE_TERRA=$(( 1024 * 1024 * 1024 * 1024 )) # in KB
    
    for folder in "${src_path}"*; do
        if ! [[ -d "${folder}" ]]; then continue; fi
        if ! [[ -d "${dest_path}${dir_suffix}" ]]; then
            mkdir "${dest_path}${dir_suffix}"
        folder_size=$(du -s "${folder}" | grep -E -o "[[:digit:]]+")
        curr_total=$(( curr_total + folder_size ))
        mv "${folder}" "${dest_path}${dir_suffix}"
        if (( curr_total > ONE_TERRA )); then
            dir_suffix=$(( dir_suffix + 1 ))
        fi
    

    步骤如下:

    1. 对于模式/media/date/resource*的每个节点
    2. 如果不是目录,继续
    3. 如果 dest 目录不存在,则创建它
    4. 获取要移动的目录的大小(以 KB 为单位)
    5. 将其添加到 dest dir 的当前总计中
    6. 将目录移动到目标目录
    7. 如果 curr dest dir 大小超过 1 terra,则增加 dest dir 后缀。

    我没有测试过代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多