You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Bash/Shell脚本移除两级子目录并保留嵌套数据

批量移除指定嵌套层级并迁移文件的Shell方案

脚本实现

以下脚本可以批量处理folder1下所有符合结构的文件,移除date_to=和sys_date_from=两级目录,并将文件迁移到对应的父目录,同时保留其他结构:

#!/bin/bash

# 替换为实际的folder1路径
ROOT_DIR="./folder1"

# 定位所有需要迁移的文件
find "$ROOT_DIR" -type f -path "*/date_to=*/sys_date_from=*" | while read -r file_path; do
    # 移除路径中的date_to和sys_date_from两级目录
    target_path=$(echo "$file_path" | sed -E 's/\/date_to=[^\/]+\/sys_date_from=[^\/]+//')
    
    # 创建目标目录(确保不存在时自动生成)
    target_dir=$(dirname "$target_path")
    mkdir -p "$target_dir"
    
    # 移动文件(-v参数用于显示操作过程,方便验证)
    mv -v "$file_path" "$target_path"
done

# 可选:清理空的date_to和sys_date_from目录
find "$ROOT_DIR" -type d \( -name "date_to=*" -o -name "sys_date_from=*" \) | sort -r | while read -r dir_path; do
    if [ -z "$(ls -A "$dir_path")" ]; then
        rmdir -v "$dir_path"
    fi
done

工作原理

  1. 文件定位:通过find命令匹配所有包含date_to=*/sys_date_from=*层级的文件,确保只处理需要迁移的目标文件。
  2. 路径转换:用sed正则表达式直接替换路径中/date_to=[^/]+/sys_date_from=[^/]+这段内容——[^/]+匹配任意非路径分隔符的字符,完美适配动态变化的目录值(比如date_to=2023-10-12或sys_date_from=12%1A22%3A19.489)。
  3. 目录创建:mkdir -p确保目标目录存在,避免移动文件时因目录缺失报错。
  4. 空目录清理:可选步骤通过sort -r先删除子目录(sys_date_from=*)再删除父目录(date_to=*),只清理空目录,避免误删有残留文件的目录。

注意事项

  • 先验证再执行:可以将mv -v改为echo mv -v,先打印所有要执行的移动命令,确认路径转换正确后再实际执行。
  • 处理特殊字符:脚本中用read -r和双引号包裹所有路径变量,支持路径中的空格、百分号等特殊字符(如示例中的sys_date_to=8888-12-31 23%3A59%3A59.999)。
  • 数据备份:执行前建议备份目标目录数据,避免意外操作导致数据丢失。

内容的提问来源于stack exchange,提问作者user2441441

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 19:32:32