我有一堆类似的文件FileNameX.cpp
,我想将它们全部重命名为各自的file_name_x.cpp
.
答案1
这个 bash 命令可以完成这个任务。从命令行进入文件夹,然后运行以下行:
for file in ./* ; do mv "$file" "$(echo $file|sed -e 's/\([A-Z]\)/_\L\1/g' -e 's/^.\/_//')" ; done
在脚本形式中它看起来像这样:
#!/bin/bash
for file in ./* ; do
mv "$file" "$(echo $file|sed -e 's/\([A-Z]\)/_\L\1/g' -e 's/^.\/_//')"
done
基本上sed
是用来操作字符串的。有两个埃表达式:
s/\([A-Z]\)/_\L\1/g
:搜索大写字母s将其替换为小写并添加下划线s/^.\/_//
: 删除由于首字母大写而插入的任何下划线(即,您不想要_file_name_x.cpp
。
考虑在 mv 上使用-v
,--verbose
来解释正在做的事情。