如何用Bash脚本将所有子目录名称转为小写?
批量将目录及子目录名称转为小写的Bash方案
可以用find命令配合循环实现,核心是要从最底层的子目录开始向上处理,避免父目录名称变更后子目录路径失效。
单行执行命令
直接在终端运行以下命令即可完成批量转换:
find . -type d -depth | while read -r dir; do lower_dir=$(echo "$dir" | tr '[:upper:]' '[:lower:]') if [ "$dir" != "$lower_dir" ]; then mv -v "$dir" "$lower_dir" fi done
命令细节解释
find . -type d -depth:遍历当前目录下所有类型为目录的项,-depth参数强制find从最深层级的目录开始输出,确保先修改子目录,再修改其父目录,避免路径错误。tr '[:upper:]' '[:lower:]':将目录名称中的所有大写字母转换为小写。mv -v "$dir" "$lower_dir":仅当原目录名与转换后的小写名称不一致时执行重命名,-v参数会打印每一步的重命名操作,方便跟踪进度。read -r:正确处理包含空格或特殊字符的目录名称,避免被错误分割。
注意事项
- 执行前建议备份目标目录,防止意外操作导致数据丢失。
- 若要处理指定目录而非当前目录,将
find命令中的.替换为目标目录的绝对或相对路径即可。
内容的提问来源于stack exchange,提问作者ckelmeckis
相关产品推荐
相关产品推荐

