我有一个文件夹“activity”,其中包含getEmployee.java,getTable.java等文件。我想知道是否有一个unix命令可以替换文件Name给我:GetEmployee.java,GetTable.java和等等。
我试过了mv getEmployee.java GetEmployee.java
然而,由于我有近70个文件,因此您可以想象这非常麻烦。在Unix中我有办法吗?我通常使用sed
来替换内容,但我认为这不适用于文件名。有人可以建议一个更简单的方法吗?
答案 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不需要这个功能