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

Linux Bash中如何将文件名(不含扩展名)替换为目录名?

批量重命名Output开头文件为目录名+原扩展名

你的脚本存在两个关键问题:

  1. 循环定义的变量是f,但后续引用的是未定义的file,导致变量为空
  2. 重命名时未保留原文件的扩展名,且所有文件会被改成同一个名字,会造成文件覆盖

以下是两种可行的解决脚本:

方法一:直接截取扩展名部分

nombre=${PWD##*/}

for f in Output*; do
    # 去掉文件名开头的"Output",保留扩展名(含点)
    ext="${f#Output}"
    mv -- "$f" "${nombre}${ext}"
done

比如Output.txt会被改成当前目录名.txt,Output.csv改成当前目录名.csv,无扩展名的Output会直接改成目录名。

方法二:提取后缀名(更通用)

nombre=${PWD##*/}

for f in Output*; do
    # 提取文件的后缀名(不含点)
    ext="${f##*.}"
    # 判断文件是否有后缀名
    if [ "$ext" = "$f" ]; then
        # 无后缀名,直接重命名为目录名
        mv -- "$f" "$nombre"
    else
        # 有后缀名,拼接目录名+点+后缀名
        mv -- "$f" "${nombre}.${ext}"
    fi
done

注意事项

  • 执行前可以把mv换成echo mv,先预览重命名操作,确认无误再执行实际的mv
  • -- 用于避免文件名以-开头时被mv识别为命令选项

内容的提问来源于stack exchange,提问作者Gerald Vasquez Aleman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 15:25:25