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

Linux下Shell脚本:查找指定命名规则的二级子目录并重命名

没问题,我来帮你搞定这个Shell脚本需求!这里有个完整的实现方案,还会一步步拆解逻辑,方便你根据自己的实际命名规则调整。

完整Shell脚本
#!/bin/bash

# 定义要移除的前缀和目录匹配规则
PREFIX="andrew-"
# 这里的匹配规则可以根据你的实际需求修改,比如"proj-*"等
MATCH_PATTERN="${PREFIX}*"

# 在主目录下查找最多2级深度的目标目录
find ~ -maxdepth 2 -mindepth 1 -type d -name "$MATCH_PATTERN" | while IFS= read -r dir; do
    # 获取目录的原始名称(不带路径)
    original_name=$(basename "$dir")
    # 移除前缀得到新名称
    new_name=${original_name#$PREFIX}
    
    # 执行重命名(如果想先预览操作,把下面的mv改成echo mv即可)
    mv "$dir" "$(dirname "$dir")/$new_name"
    echo "已重命名: $dir → $(dirname "$dir")/$new_name"
done
脚本逻辑拆解
  • 目录查找部分:

    • find ~ -maxdepth 2 -mindepth 1 -type d -name "$MATCH_PATTERN":
      • ~ 代表当前用户的主目录;
      • -maxdepth 2 限制查找深度最多为2级(主目录下直接子目录是1级,子目录里的子目录是2级);
      • -mindepth 1 排除主目录本身;
      • -type d 只筛选目录,不会匹配文件;
      • -name "$MATCH_PATTERN" 按照你定义的命名规则匹配目录,这里是匹配以andrew-开头的目录。
  • 重命名部分:

    • while IFS= read -r dir:保证包含空格的目录路径能被正确读取,避免截断;
    • original_name=$(basename "$dir"):提取目录的纯名称(去掉前面的路径);
    • new_name=${original_name#$PREFIX}:用Shell参数展开移除前缀,#符号表示从字符串开头删除最短的匹配前缀;
    • mv "$dir" "$(dirname "$dir")/$new_name":拼接新的路径,完成目录重命名。
注意事项
  1. 先预览再执行:如果不确定操作是否正确,可以把脚本里的mv改成echo mv,这样会打印出要执行的重命名命令,确认无误后再改回mv。
  2. 自定义规则:修改PREFIX和MATCH_PATTERN变量,就能适配你的实际命名需求,比如要移除proj-前缀,就把PREFIX设为proj-,MATCH_PATTERN设为proj-*。
  3. 权限问题:确保你对目标目录有读写权限,否则重命名会失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:13:17