使用rename按日期模式批量重命名文件遇错误码4求助
解决util-linux rename重命名文件的问题
看起来你踩了个很常见的坑——混淆了Perl版rename和util-linux版rename的语法!你用的是util-linux 2.33.1的rename,它不支持Perl风格的正则替换(就是你写的s/.../.../这种格式),这也是你每次执行都返回错误码4的核心原因。
先搞懂util-linux rename的正确语法
它的格式很简单,是固定字符串/简单通配符替换,不是正则匹配:
rename [选项] <要替换的内容> <替换后的内容> <目标文件>
这里的通配符只有两种:?匹配单个任意字符,*匹配任意长度的字符,像你之前用的.、()这类Perl正则元字符完全不生效。
针对你的两种文件名的解决方案
你的文件分两种格式,我们可以分两步处理(先测试再执行更稳妥):
1. 处理带下划线的文件:xx-xx-xxxx-Protocoll_xx.xx.xxxx.md → Protocoll xx.xx.xxxx.md
我们需要去掉开头的xx-xx-xxxx-,同时把Protocoll_里的下划线换成空格:
rename -v -n '??-??-????-Protocoll_' 'Protocoll ' *.md
2. 处理带空格的文件:xx-xx-xxxx-Protocoll xx.xx.xxxx.md → Protocoll xx.xx.xxxx.md
只需要去掉开头的xx-xx-xxxx-即可:
rename -v -n '??-??-????-Protocoll ' 'Protocoll ' *.md
小提示
-n是干跑测试参数,只会输出预期的重命名结果,不会实际修改文件,确认输出符合你想要的效果后,去掉-n再执行就能完成实际重命名。-v是 verbose模式,会显示每个文件的重命名过程,方便你核对。
内容的提问来源于stack exchange,提问作者Lithimlin
相关产品推荐
相关产品推荐

