求助:如何批量移除目录中文件名xml_之后的内容?
移除目录文件中的时间戳解决方案
你的问题大概率是因为系统使用的rename命令版本不同,下面给你几个靠谱的解决方法:
方法1:通用Shell循环(所有Linux系统都适用)
不用纠结rename版本,直接用mv配合Shell参数扩展就能搞定:
for file in *.xml_*; do mv "$file" "${file%_*}" done
解释:${file%_*}会自动去掉文件名最后一个_及其后面的所有内容,刚好把ABC.xml_202401012300转换成ABC.xml。
方法2:Perl版rename(Debian/Ubuntu等系统常用)
如果你的系统是Perl版rename(输入rename --version能看到Perl相关标识),把正则改得更精准即可:
rename 's/_\d+$//' *.xml_*
要是想更严格匹配.xml_开头的时间戳,用这个:
rename 's/(\.xml)_\d+$/$1/' *.xml_*
你之前的命令没生效的原因:s/xml_.*$/.xml/逻辑本身没问题,但如果你的rename不是Perl版,它会把xml_.*$当成字面字符串去匹配,自然找不到对应文件。
方法3:util-linux版rename(RHEL/CentOS等系统常用)
如果是util-linux版的rename(输入rename --version显示util-linux相关信息),用字面替换的语法:
rename '_[0-9]*' '' *.xml_*
精准替换.xml_加时间戳的版本:
rename '.xml_[0-9]*' '.xml' *.xml_*
内容的提问来源于stack exchange,提问作者grabrep gg
相关产品推荐
相关产品推荐

