Linux批量重命名文件:移除schema_前缀保留目标格式
批量重命名文件:移除文件名前缀
你之前的mv命令无法工作,因为shell通配符不能直接实现这种前缀替换逻辑。以下是几种可行的解决方法:
方法1:Bash 循环(通用跨平台)
直接用bash的参数扩展移除文件名开头的schema_前缀:
for file in schema_*.sql; do # 跳过无匹配文件的情况,避免处理字面量`schema_*.sql` [ -e "$file" ] || continue mv -- "$file" "${file#schema_}" done
${file#schema_}:Bash参数扩展语法,用于移除字符串开头的schema_部分--:避免文件名以-开头时被误识别为命令选项
方法2:Perl版rename(Debian/Ubuntu等系统默认)
如果你的系统安装的是Perl版本的rename(可通过rename --version查看,输出包含Perl字样),可以用正则批量替换:
# 先加-n参数测试,仅显示要修改的文件名(不实际执行) rename -n 's/^schema_//' schema_*.sql # 确认无误后去掉-n执行实际重命名 rename 's/^schema_//' schema_*.sql
正则^schema_匹配文件名开头的schema_,替换为空字符串即可完成重命名。
方法3:util-linux版rename(RHEL/CentOS等系统默认)
如果是util-linux版本的rename,语法更简洁:
# 加-v参数可查看每一步的重命名操作 rename -v schema_ '' schema_*.sql
第一个参数是要替换的字符串,第二个是替换后的内容,最后是目标文件集合。
内容的提问来源于stack exchange,提问作者Jan Pietruszka
相关产品推荐
相关产品推荐

