Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 更新文件名最后一个字符的Shell脚本_Linux_Shell_Unix - Fatal编程技术网

Linux 更新文件名最后一个字符的Shell脚本

Linux 更新文件名最后一个字符的Shell脚本,linux,shell,unix,Linux,Shell,Unix,我在目录和子目录中有文件,文件名应该更改,最后一个字符应该替换为数字或字符,具体取决于提供的参数。我可以为数字而做,但不能为角色而做 例如,如果文件名为20170504abcdxxxyy6.xml或20170504cflfxxxyy6.cfl.bz2 如果我编写命令/updateLastCharacter 5,文件名应该是20170504abcdxxxyy5.xml或20170504CFLFXXXYYY5.cfl.bz2 如果命令为/updateLastCharacter A,则文件名应为201

我在目录和子目录中有文件,文件名应该更改,最后一个字符应该替换为数字或字符,具体取决于提供的参数。我可以为数字而做,但不能为角色而做

例如,如果文件名为
20170504abcdxxxyy6.xml
20170504cflfxxxyy6.cfl.bz2

如果我编写命令
/updateLastCharacter 5
,文件名应该是
20170504abcdxxxyy5.xml
20170504CFLFXXXYYY5.cfl.bz2

如果命令为
/updateLastCharacter A
,则文件名应为
20170504ABCDXXXYYYA.xml
20170504CFLFXXXYYYA.cfl.bz2

我不熟悉shell脚本。我为实现这一目标做了很多努力,但我能做的是:

find $directory -exec rename "s/[0-9].xml/$newNumber.xml/;s/[0-9].cfl/$newRevisionNumber.cfl/" {} ";"

这对数字很好,但我正在寻找如何使用单行命令对字符执行此操作。

使用
重命名
的简单解决方案(perl函数)

find.|重命名-n-v's/[A-Za-z0-9](?=\)/5/'

-n
表示不采取任何行动
-v
表示屏幕上的冗长


您可以直接使用程序实用工具,它比Perl中的重命名功能更强大。
我自己写的程序,因为我需要很多重命名或删除文件


一个带有
重命名的简单解决方案(perl函数)

find.|重命名-n-v's/[A-Za-z0-9](?=\)/5/'

-n
表示不采取任何行动
-v
表示屏幕上的冗长


您可以直接使用程序实用工具,它比Perl中的重命名功能更强大。
我自己写的程序,因为我需要很多重命名或删除文件


中的字符您要搜索A-Z和A-Z,对吗?中的字符您要搜索A-Z和A-Z,对吗?