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

将文件名的第一个字母大写的Unix命令,unix,command-line,replace,filenames,Unix,Command Line,Replace,Filenames,我有一个文件夹活动,其中包含诸如getEmployee.java、getTable.java等文件。我想知道是否有一个unix命令可以替换给我的文件名:getEmployee.java、getTable.java等等 我试过mv getEmployee.java getEmployee.java 然而,这是相当麻烦的,因为我有将近70个文件。在Unix中有没有办法做到这一点?我通常使用sed替换东西,但我认为这对文件名不起作用。有人能推荐一种更简单的方法吗?这是一个shell脚本,它将在本地目录

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

我试过mv getEmployee.java getEmployee.java


然而,这是相当麻烦的,因为我有将近70个文件。在Unix中有没有办法做到这一点?我通常使用sed替换东西,但我认为这对文件名不起作用。有人能推荐一种更简单的方法吗?

这是一个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+xalterjava的脚本中,然后在我为测试准备的零大小文件目录中运行它。您可以在运行命令之前检查命令,方法是注释掉cmd行并取消对printf行的注释这是一个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+xalterjava的脚本中,然后在我为测试准备的零大小文件目录中运行它。您可以在运行命令之前检查命令,方法是注释掉cmd行并取消对printf行的注释

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

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

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

awk -F '' '{OFS=""; $1=toupper($1)}1' activity
删除-n以执行命令


remove-n执行命令

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

!/bin/bash 对于*.java中的i;do mv-v$i${i^};完成
注意,这不是标准POSIX;其他shell不需要此功能

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

!/bin/bash 对于*.java中的i;do mv-v$i${i^};完成
注意,这不是标准POSIX;其他shell不需要此功能

您使用的shell是什么?例如,我相信使用bash4.x比使用bash3.x.gnomeshell要容易一些。在rhel5中,您使用的是什么shell?例如,我相信使用bash4.x比使用bash3.x.gnomeshell要容易一些。在rhel5中。太好了。。。!你能不能向我解释一下发生了什么事?当然可以。通过将字段分隔符设为空-F,此awk命令将每个输入的字符读入一个单独的字段$1、$2等。然后我将第一个字段设为第一个字符大写,并使用OFS=I将所有字段合并成一个字符串,再次打印整行。等等。。这不会更改文件名。仅更改文件本身中的第一个字母。我做错什么了吗?抱歉…它会把例如getEmployee.java变成getEmployee.java,太好了。。。!你能不能向我解释一下发生了什么事?当然可以。通过将字段分隔符设为空-F,此awk命令将每个输入的字符读入一个单独的字段$1、$2等。然后我将第一个字段设为第一个字符大写,并使用OFS=I将所有字段合并成一个字符串,再次打印整行。等等。。这不会更改文件名。仅更改文件本身中的第一个字母。我做错什么了吗?抱歉…它会将例如getEmployee.java转换为getEmployee.javaOutputs的文件名。java未重命名:“filename.java”已存在于macOS High Sierra上具有自制版本重命名输出文件名的所有文件中。java未重命名:“filename.java”已存在于macOS High Sierra上具有自制版本重命名输出文件名的所有文件中