1

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

我试过了mv getEmployee.java GetEmployee.java

但是,您可以想象,这非常麻烦,因为我有将近 70 个文件。在 Unix 中有没有办法可以做到这一点?我通常sed用来替换东西,但我认为这不适用于文件名。有人可以建议一个更简单的方法吗?

4

3 回答 3

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() 行来检查命令

于 2013-06-25T18:26:09.713 回答
3

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

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

请注意,这不是标准的 POSIX;其他shell不需要这个特性

于 2017-05-05T13:11:40.787 回答
0
rename -vn 's/([a-z])(\w+.java)/\u$1$2/' *.java

去掉 -n 执行命令

于 2017-05-05T04:41:50.763 回答