Unix命令用于大写文件名的第一个字母

时间:2013-06-25 17:42:01

标签: unix command-line replace filenames

我有一个文件夹“activity”,其中包含getEmployee.java,getTable.java等文件。我想知道是否有一个unix命令可以替换文件Name给我:GetEmployee.java,GetTable.java和等等。

我试过了mv getEmployee.java GetEmployee.java

然而,由于我有近70个文件,因此您可以想象这非常麻烦。在Unix中我有办法吗?我通常使用sed来替换内容,但我认为这不适用于文件名。有人可以建议一个更简单的方法吗?

4 个答案:

答案 0 :(得分:3)

这是一个shell脚本,它将在本地目录中找到* .java文件并更改它们:

#!/bin/sh

find . -name "*.java" -print | gawk -F "/" '
{
    new = sprintf( "%s%s", toupper( substr( $NF, 1, 1 ) ), substr( $NF, 2 ) )

    cmd = sprintf( "mv %s %s", $NF, new )

    # comment out the next two lines and uncomment the printf() to see the commands
    cmd | getline ret_val
    close( cmd )

    #printf( "%s => ret_val = %s\n", cmd, ret_val"" )
} '

我将它保存到名为“alterjava”的脚本中,“chmod + x alterjava”然后在我编制的用于测试的零大小文件的目录上运行它。您可以在运行它之前检查命令,方法是注释掉cmd行并取消注释printf()行

答案 1 :(得分:0)

您可以使用awk重命名文件名,只需一行代码:

awk -F '' '{OFS=""; $1=toupper($1)}1' activity

答案 2 :(得分:0)

rename -vn 's/([a-z])(\w+.java)/\u$1$2/' *.java

删除-n以执行命令

答案 3 :(得分:0)

Bash可以在参数替换中执行大小写替换,使用${^}来大写第一个字符:

#!/bin/bash
for i in *.java; do mv -v "$i" "${i^}"; done

请注意,这不是标准POSIX;其他shell不需要这个功能