使用正则表达式通过命令行重命名具有相似名称的多个文件

时间:2014-08-20 19:08:22

标签: regex rename mv

我有3个名为的文件:test_1,test_2和test_3。我怎样才能使用1 mv命令将它们重命名为:TEST_1,TEST_2和TEST_3?谢谢!

2 个答案:

答案 0 :(得分:0)

如果您有rename脚本,请使用:

rename 'y/[a-z]/[A-Z]/' test_*

答案 1 :(得分:0)

鉴于这些文件:

$ ls
Test_1  tesT_3  test 4  test_2

(注意带有空格的test 4)您可以像这样使用splat循环:

$ for f in *; do mv -v "${f}"  "$(echo ${f} | tr '[:lower:]' '[:upper:]')"; done
Test_1 -> TEST_1
tesT_3 -> TEST_3
test 4 -> TEST 4
test_2 -> TEST_2
$ ls
TEST 4  TEST_1  TEST_2  TEST_3

它依赖于使用tr将低级大写翻译为大写,这是LOCALE敏感的。

如果您想要更完整的控制,请使用perl或sed替换正则表达式模式作为文件名:

$ ls
test_1  test_2  test_3
$ for f in *; do mv -v "${f}"  "$(echo ${f} | perl -pe 's/([a-z])?(.*)/\U\1\E\2/')"; done 
test_1 -> Test_1
test_2 -> Test_2
test_3 -> Test_3
$ ls
Test_1  Test_2  Test_3