bash 或 shell 脚本删除子目录但保留所有嵌套数据

问题描述 投票:0回答:1

我有一个深层嵌套的文件夹结构,我想通过完全删除子目录来减少两层嵌套,但将它们下面的所有数据带到父文件夹中 示例1: 路径:

folder1/folder2/id=123/date_from=2022-10-12/date_to=2023-10-12/sys_date_from=12%1A22%3A19.489/sys_date_to=8888-12-31 23%3A59%3A59.999/slice=watermelon/binary_file_name.parquet

删除二级后我想要的路径-

folder1/folder2/id=123/date_from=2022-10-12/sys_date_to=8888-12-31 23%3A59%3A59.999/slice=watermelon/binary_file_name.parquet

这里我从路径中删除了两级 date_to=2023-10-12 和 sys_date_from=12%1A22%3A19.489,但没有数据丢失。无论他们下面有什么,我都会把它放在他们的父文件夹外面。

嵌套文件夹中的folde2和等于(=)后的值不断变化。

例如我也可以有:

folder1/folder10/id=456/date_from=2021-04-01/date_to=2022-03-11/sys_date_from=08%8G22%3B19.909/sys_date_to=8888-12-31 23%3A59%3A59.999/slice=apple/binary_file_name2.parquet

删除 date_to 和 sys_date_from 文件夹后,我的文件结构应如下所示:

folder1/folder10/id=456/date_from=2021-04-01/sys_date_to=8888-12-31 23%3A59%3A59.999/slice=apple/binary_file_name2.parquet

我考虑通过 find 命令获取此工作环,但努力使任何内容连贯一致。如何通过 bash 命令或 shell 脚本执行此操作? 我想以自动方式对folder1 下的所有文件夹执行此操作。 folder1 下最多可以有十个文件夹。

bash sh
1个回答
0
投票
#!/bin/bash
(
    shopt -s dotglob nullglob
    for top in folder1/folder*/id=*/date_from=* ; do
        pushd "$top"
        for sub in date_to=*/sys_date_from=* ; do
            mv "$sub"/* .
            rmdir "$sub" "${sub%/*}"
        done
        popd
    done
)

假设

date_to=2023-10-12
包含
sys_date_from=12%1A22%3A19.489
;非空则无法删除

© www.soinside.com 2019 - 2024. All rights reserved.