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

如何修改Shell脚本实现子目录下TIF文件批量数字重命名?

递归批量重命名所有子目录中的TIFF文件

原脚本仅处理指定路径下的直接文件,无法遍历子目录,以下是两种可行的修改方案:

方案一:使用find命令递归查找(兼容性好)

num=1   
echo "Enter the file path"
read -r path 

# 递归查找所有.tif文件并按路径排序,确保编号顺序稳定
find "$path" -type f -name "*.tif" | sort | while read -r file; do
    # 提取文件所在的子目录
    file_dir=$(dirname "$file")
    # 生成4位数字格式的新文件名,保留在原目录
    mv -v "$file" "$file_dir/$(printf "%04d" $num).tif"
    num=$((num + 1))
done

关键说明:

  • find "$path" -type f -name "*.tif":递归定位指定路径下所有后缀为.tif的文件
  • sort:对查找结果排序,避免因find遍历顺序不稳定导致编号混乱
  • dirname "$file":获取文件所在的子目录,保证重命名后的文件留在原位置,不会全部移动到根路径

方案二:使用bash globstar(仅bash 4.0+支持)

如果你的bash版本在4.0及以上,可以开启递归通配符特性:

num=1   
echo "Enter the file path"
read -r path 

# 开启递归通配符**
shopt -s globstar
# **/*.tif 匹配当前目录及所有子目录下的.tif文件
for file in "$path"/**/*.tif; do
    # 跳过非文件的匹配结果(避免无匹配时的错误)
    [ -f "$file" ] || continue
    file_dir=$(dirname "$file")
    mv -v "$file" "$file_dir/$(printf "%04d" $num).tif"
    num=$((num + 1))
done
# 关闭递归通配符(可选,恢复默认设置)
shopt -u globstar

关键说明:

  • shopt -s globstar:开启后,**会匹配当前目录及所有层级的子目录
  • [ -f "$file" ] || continue:防止当没有子目录文件时,通配符字符串被当作文件处理

注意事项:

  • 若目标目录已存在同编号的文件,mv会直接覆盖,建议提前备份文件或添加存在性判断逻辑
  • 上述方案的编号为全局递增,若需要每个子目录单独从1开始编号,需调整脚本逻辑(比如按目录分组计数)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 14:07:25