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

Ubuntu 22.04终端中批量移除文件名特定格式内容的方法

Ubuntu 22.04终端中批量移除文件名特定格式内容的方法

我来给你几个在Ubuntu 22.04终端里高效解决这个问题的方法,都是实际工作里常用的,你可以按需选择:

方法一:用Perl版rename命令(最简洁)

Ubuntu 22.04默认预装的是Perl版本的rename,这个工具处理批量文件名替换特别顺手。

  1. 先预览修改效果(强烈推荐先做这一步,避免误操作):
rename -n 's/\.\[\w{8}\]//' *.mp4

这个命令不会实际修改文件名,只会输出如果执行的话会改成什么样子,比如会显示类似rename(160-O.Terror.Está.A.Chegar.[617229A4].mp4, 160-O.Terror.Está.A.Chegar.mp4)的内容,确认没问题再执行实际修改。

  1. 执行实际改名:
rename 's/\.\[\w{8}\]//' *.mp4

命令拆解:

  • s/模式/替换内容/:Perl的替换语法,这里是把匹配到的模式替换成空(//就代表空内容)
  • \.\[:因为.和[在正则表达式里是有特殊含义的字符,所以用\转义,用来精准匹配文件名里的. [(注意是连在一起的. [)
  • \w{8}:匹配连续8个字母、数字或下划线,刚好对应你提到的那串8位字符序列
  • *.mp4:限定只对当前目录下所有的mp4文件生效

方法二:用Bash循环+mv命令(兼容性更强)

如果你的系统里碰巧没有Perl版rename(虽然Ubuntu 22.04默认自带,但以防万一),可以用更通用的Bash循环结合mv命令来实现:

同样先做预览(把mv换成echo mv,只输出不会实际改名):

for file in *.mp4; do
    new_name=$(echo "$file" | sed 's/\.\[[0-9A-Za-z]\{8\}\]//')
    echo mv -v "$file" "$new_name"
done

确认输出的新文件名完全符合你的预期后,去掉echo执行实际改名:

for file in *.mp4; do
    new_name=$(echo "$file" | sed 's/\.\[[0-9A-Za-z]\{8\}\]//')
    mv -v "$file" "$new_name"
done

命令拆解:

  • for file in *.mp4:遍历当前目录下所有的mp4文件,把每个文件名赋值给file变量
  • sed 's/\.\[[0-9A-Za-z]\{8\}\]//':用sed工具处理原文件名,[0-9A-Za-z]明确匹配数字和大小写字母,比\w更精准(如果你确定那8位字符只有数字和字母的话)
  • mv -v:-v参数会显示每个文件的改名过程,方便你实时确认操作情况

额外实用提示

  • 如果需要处理子目录里的所有mp4文件,可以结合find命令来实现:
    先预览效果:
    find . -type f -name "*.mp4" -exec rename -n 's/\.\[\w{8}\]//' {} \;
    
    确认无误后执行实际修改:
    find . -type f -name "*.mp4" -exec rename 's/\.\[\w{8}\]//' {} \;
    
  • 操作前最好先复制几个测试文件到空目录里试手,确保命令完全符合预期后,再去处理真实的文件,避免误改重要内容。

备注:内容来源于stack exchange,提问作者Nuno Fonseca

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 11:08:19