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

如何用Bash批量将所有子文件夹与文件的首字母大写?

递归重命名所有文件和文件夹(首字母大写)

你可以用以下几种方法实现递归处理所有子目录的文件和文件夹:

方法1:使用find命令(最可靠)

find的-depth选项会让它先处理子目录内的内容,再处理父目录,避免因父目录重命名导致子路径失效的问题:

find . -depth -exec rename -f 's/./\U$&/' {} +
  • -depth:确保从最深层的子目录开始处理,向上遍历
  • -exec ... {} +:将找到的所有文件/目录批量传递给rename命令,提升效率

方法2:使用Bash的globstar扩展

如果你的Bash版本支持globstar(一般Bash 4.0+默认开启,可通过shopt -s globstar手动开启),可以用递归通配符**匹配所有子目录:

shopt -s globstar
# 先处理深层路径,避免父目录重命名后子路径失效
for path in $(find . -depth | grep -v '^\.$'); do
    rename -f 's/./\U$&/' "$path"
done

或者更简洁的方式(但需注意路径顺序,可能需要先排序):

shopt -s globstar
rename -f 's/./\U$&/' **/*

注意:直接用**/*可能会因先重命名父目录导致部分子路径无法找到,因此优先推荐find的-depth方案。

关键细节说明

  • 你的原命令s/./\U$&/是Perl风格的正则替换,\U$&会将匹配到的第一个字符(.匹配任意单个字符,即文件名首字符)转换为大写,这个逻辑是正确的。
  • 确保你使用的是Perl版本的rename(大部分Linux发行版默认是),如果是util-linux版本的rename,语法会不同,需要调整正则表达式格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 08:35:00