Linux下如何删除文件名中的第一个分隔符?
批量删除文件名中的第一个分隔符(点)
你的mv a.b* ab*命令无效,是因为shell通配符展开后,ab*并没有对应的目标文件名,mv无法自动完成这种模式匹配的替换。以下是几种可行的解决方案:
方法1:Bash循环+参数扩展
这是最通用的方法,无需额外安装工具:
cd my_directory for file in a.b*; do mv -- "$file" "${file/./}" done
${file/./}是Bash的参数扩展语法,会将文件名中的第一个点替换为空字符串,实现删除效果。--用于处理文件名以-开头的情况,避免被mv识别为命令选项。
方法2:Perl版rename命令(Debian/Ubuntu等系统默认)
如果系统安装的是Perl版本的rename,可以用正则表达式快速替换:
cd my_directory rename 's/\.//' a.b*
s/\.//是正则替换规则,匹配第一个.并替换为空。- 加上
-n参数可以先预览修改结果,避免误操作:rename -n 's/\.//' a.b*
方法3:Util-linux版rename命令(RHEL/CentOS等系统默认)
部分系统使用的是util-linux套件的rename,语法更简单:
cd my_directory rename . '' a.b*
- 语法格式为
rename 旧字符串 新字符串 目标文件,这里将第一个.替换为空。
内容的提问来源于stack exchange,提问作者Andy Junghyun Kim
相关产品推荐
相关产品推荐

