开发者社区> 问答> 正文

如何在Linux中递归重命名目录和子目录?

假设我有200个目录,并且它具有可变的层次结构子目录,如何使用带有find或任何组合的mv命令重命名目录及其子目录?

for dir in ./*/; do (i=1; cd "$dir" && for dir in ./*; do printf -v dest %s_%02d "$dir" "$((i++))"; echo mv "$dir" "$dest"; done); done

这是2级子目录,是否有更简洁的方法可用于多个层次结构?欢迎任何其他一行命令建议/解决方案

展开
收起
游客ufivfoddcd53c 2020-01-04 14:31:36 1087 0
1 条回答
写回答
取消 提交回答
  • 我有一个特定的任务-替换目录和文件中的非ASCII符号和方括号。工作正常。

    首先,作为工作示例,正是我的情况:

    find . -depth -execdir rename -v 's/([^\x00-\x7F]+)|([\[\]]+)/\_/g' {} \;
    
    

    或分别使用非ASCII和方括号:

    find . -depth -execdir rename -v 's/[^\x00-\x7F]+/\_/g' {} \;
    find . -depth -execdir rename -v 's/[\[\]]+/\_/g' {} \;
    
    

    如果我们只想使用目录,请添加-type d(在-depth选项之后)

    现在,从更广义的角度来看:

    find . -depth [-type d] [-type f] -execdir rename [-v] 's/.../.../g' '{}' \;
    
    

    在这里,我们可以控制目录/文件和详细程度。您的计算机上是否可能需要在{}周围加上引号(反斜杠;;之前相同,但可能会被引号代替)

    2020-01-04 14:32:05
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Alibaba Cloud Linux 3 发布 立即下载
ECS系统指南之Linux系统诊断 立即下载
ECS运维指南 之 Linux系统诊断 立即下载