我有一个深层嵌套的文件夹结构,我想通过完全删除子目录来减少两层嵌套,但将它们下面的所有数据带到父文件夹中 示例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 下最多可以有十个文件夹。
#!/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
;非空则无法删除