V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
openbsd
V2EX  ›  Linux

shell 脚本通过正则修改文件名脚本编写

  •  
  •   openbsd · 2019 年 9 月 29 日 · 4945 次点击
    这是一个创建于 2308 天前的主题,其中的信息可能已经有所发展或是发生改变。
    公司有一套古老系统迁移到 Linux 出现附件无法获取,原因大致为文件名包含中文,特殊符号等导致程序无法正常读取文件,现在想通过修改文件名和数据库记录后实现
    请教在 shell 上批量修改文件名如何编写脚本

    原文件名:123456789-XXXXXXXX.zzzz

    前段一定是一串随机 数字
    - 可能是其它字符 类似 _ 空格等
    XXXXXXXX 可能是 中 /英 文或者其他各种乱七八糟的字符
    zzzz 文件扩展名 可能是 3 位 /4 位英文字母

    希望改成 123456789.xxx
    也就是截取原文件名前所有数字部分+文件扩展名
    14 条回复    2019-09-29 18:02:53 +08:00
    CallMeReznov
        1
    CallMeReznov  
       2019 年 9 月 29 日
    建议直接用 py 脚本
    walk 下所有文件,随机生成新的文件名后在向数据库提交修改.
    CallMeReznov
        2
    CallMeReznov  
       2019 年 9 月 29 日   ❤️ 1
    另外前几天有人问了相似的问题
    你可以看一下
    https://www.v2ex.com/t/604644
    0x11901
        3
    0x11901  
       2019 年 9 月 29 日
    先 find 找到文件和路径,再使用 basename 获取文件名字,再用 shell/bash 库截取-前的数字和.后的扩展名,最后 mv 一下搞定……为什么这种简单的东西还要用 python……古老系统上不一定有 py 环境啊
    feikerwu
        4
    feikerwu  
       2019 年 9 月 29 日   ❤️ 1
    rename 's/(\d*)\..*\.(.*)/$1\.$2/' *
    CallMeReznov
        5
    CallMeReznov  
       2019 年 9 月 29 日
    @0x11901 #3 要顺便改数据库里的字段名称
    因为他是配合下载路径使用的,你光改了磁盘上的文件名,不改数据库内的信息不就成了文件丢失了?
    openbsd
        6
    openbsd  
    OP
       2019 年 9 月 29 日
    @feikerwu #4
    大神麻烦确认下?
    拷了几个文件执行后当前目录文件没任何变化......
    Hopetree
        7
    Hopetree  
       2019 年 9 月 29 日
    首选 Python 脚本感觉更简单粗暴吧
    openbsd
        8
    openbsd  
    OP
       2019 年 9 月 29 日
    @CallMeReznov
    数据量大,会另外处理
    想先拷贝部分做下测试
    Hopetree
        9
    Hopetree  
       2019 年 9 月 29 日   ❤️ 1
    感觉你这个就是 Python 做的,用 Python 链接数据库,然后读取文件名,然后执行文件重命名(先备份一份)
    0x11901
        10
    0x11901  
       2019 年 9 月 29 日
    @CallMeReznov 我看他说的是:请教在 shell 上批量修改文件名如何编写脚本,原来还要改数据库……
    xml123
        11
    xml123  
       2019 年 9 月 29 日
    你这样改文件名不会冲突吗
    feikerwu
        12
    feikerwu  
       2019 年 9 月 29 日
    @openbsd 给个文件名我试下,我模拟了几个文件是没问题
    openbsd
        13
    openbsd  
    OP
       2019 年 9 月 29 日
    @xml123 #11 前面有个 10 多位的随机数,概率应该很小才是
    @feikerwu #12
    我怀疑是系统版本问题,我这边测试环境是 CentOS6
    11140554591817487-约克.jpg
    11133801918310436-1-10.zip
    11122486297324196-01.09 PL1801090.pdf
    1111985635562443.12.29.png
    feikerwu
        14
    feikerwu  
       2019 年 9 月 29 日   ❤️ 1
    @openbsd rename 's/^(\d*)[\s\S]*\.(.*)$/$1\.$2/' *

    匹配所有文件,拿到数值开头的$1 以及.xxx 结尾的 xxx $2,重命名为$1.$2, 试了你给的文件没问题,再跑不起来就母鸡了。。。
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   2689 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 13:30 · PVG 21:30 · LAX 05:30 · JFK 08:30
    ♥ Do have faith in what you're doing.