Linux下如何使用rename或mv命令批量重命名指定目录中的文件
批量重命名带Token参数的M4A文件为序列文件名
这里有几种实用的方法帮你把目标目录里那些带?anghakamitoken=...后缀的M4A文件,批量重命名成1.m4a、2.m4a这类有序文件名:
方法一:Bash循环 + mv(兼容性拉满)
这是最通用的方案,几乎所有类Unix系统(Linux、macOS、BSD)都能直接用,还能避免文件覆盖:
- 先切换到目标文件所在目录:
cd /path/to/your/target/directory
- 执行以下循环命令:
count=1 for file in *.m4a?*; do # 跳过通配符不匹配时的空结果(避免报错) [ -f "$file" ] || continue # -n 参数确保不会覆盖已存在的文件,非常安全 mv -n "$file" "${count}.m4a" ((count++)) done
额外优化:按文件名数字排序
如果想让重命名后的序号和原文件名里的数字顺序一致(比如_02_xxx.m4a?xxx排在_10_xxx.m4a?xxx前面,而不是字典序的反向),可以用ls -v做版本排序:
count=1 for file in $(ls -v *.m4a?*); do [ -f "$file" ] || continue mv -n "$file" "${count}.m4a" ((count++)) done
方法二:Perl版rename(简洁高效)
如果你的系统装的是Perl版本的rename(大部分Linux发行版默认是这个,可通过rename --version验证,输出含Perl字样即可),可以用一行命令搞定:
先执行测试模式(不会真的修改文件名,先预览结果):
rename -n 'BEGIN { our $count = 1; } s/.*\.m4a\?.*/${count++}.m4a/' *.m4a?*
确认预览结果符合预期后,去掉-n参数执行实际重命名:
rename 'BEGIN { our $count = 1; } s/.*\.m4a\?.*/${count++}.m4a/' *.m4a?*
命令解释
BEGIN { our $count = 1; }:初始化计数器从1开始s/.*\.m4a\?.*/${count++}.m4a/:用正则匹配整个文件名(从开头到.m4a?及后面的所有内容),替换成自增的计数器值 +.m4a
内容的提问来源于stack exchange,提问作者thesalah1212
相关产品推荐
相关产品推荐

