在日常工作中,常常需要批量去掉文件的后缀名(即文件扩展名),例如手头有一批 .txt 文件,想要批量重命名,只保留文件名的主体部分。下面分享几个我个人常用的实用命令,能够高效完成这一需求。
第一种思路是利用 find 配合 sed 批量处理:
find -name "*.txt" | for i in *; do mv $i `echo $i | sed 's/\.txt//g'`; done
这种方法比较直观:先查找所有 .txt 文件,再通过 sed 将后缀名替换为空,最后执行移动操作实现重命名。
另一种方式借助 awk 和 xargs:
find -name "*.txt" | awk -F'.' '{print $1}' | xargs mv {}.txt {}
先使用 awk 以点作为分隔符,提取文件名的前半部分,然后通过 xargs 构建重命名命令,从而批量去掉扩展名。
其实,如果只是单纯修改后缀名(比如将 .txt 改为 .bk),使用 rename 命令会更加简洁:
rename .txt .bk *
一行命令就能完成,语义也非常清晰。不过需要注意,rename 在不同 Linux 发行版中的语法存在差异(Perl 版本与 util-linux 版本),执行前最好先确认本地环境适用的版本。
