V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
tyhunter
V2EX  ›  问与答

请教下 bash 脚本如何满足这种场景下的重命名

  •  
  •   tyhunter · 166 天前 · 229 次点击
    这是一个创建于 166 天前的主题,其中的信息可能已经有所发展或是发生改变。
    场景如下:当前存在一些文件需要用多个指定值替换掉多个匹配值
    (如 xxx_A 重命名为 xxx-e01 ,xxx_B 重命名为 xxx_e02 ,分别对应的关系),想到了 sed 命令,但是发现无法执行

    from_folder=/root/test ###原文件夹路径
    new_folder=/root/new ###新文件夹路径

    for file in $(find $from_folder) ###列出所有文件包含路径
    do
    [[ -d $file ]] && continue ###判断是否为文件夹
    if [[ -e ${file##*/} ]];then ###判断是否存在重名文件
    mv $file $(echo $file | sed 's/\//_/g') ####如果是重名,在名字前加入路径
    else
    newfile='echo $file | sed 's/_A/-e01/;s/_B/-e02/;s/_C/-e03/;s/_D/-e04/;'
    mv $file $newfile ###重命名文件
    mv $newfile $new_folder
    fi
    done

    但执行的时候报错了,提示 mv: target 's/_A/-e01/' is not a directory ,小白搞不清楚是哪里赋值传递出错了,还请 bash 大佬指点一下
    目前尚无回复
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2543 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 09:20 · PVG 17:20 · LAX 02:20 · JFK 05:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.