6

我需要更改颠覆工作副本中一组文件的大小写,如下所示:

svn mv test.txt 测试.txt
svn mv test2.txt Test2.txt
svn mv testn.txt Testn.txt
...
svn commit -m "大写"

我怎样才能自动化这个过程?提供标准的 linux 安装工具。

4

5 回答 5

13

ls | awk '{system("svn mv " $0 " " toupper(substr($0,1,1)) substr($0,2))}'

显然,其他脚本语言也可以正常工作。awk 的优势在于它无处不在。

于 2008-10-14T00:08:57.777 回答
2

如果你有一个不错的安装,你应该有 python,试试这个:

#!/usr/bin/python
from os import rename, listdir
path = "/path/to/folder"
try:
    dirList = listdir(path)
except:
    print 'There was an error while trying to access the directory: '+path
for name in dirList:
    try:
        rename(path+'\\'+name, path+'\\'+name.upper())
    except:
        print 'Process failed for file: '+name
于 2008-10-14T00:05:07.333 回答
1

我认为使用 bash/sed/tr/find 没有简单的方法来做到这一点。

我会制作一个 Ruby/Perl 脚本来进行重命名。

 #!/usr/bin/ruby 
 #  Upcase.rb 
 ARGV.each{ |i|
  newname = i.gsub(/(^.|\s.)/{ |x| x.upcase }
  `svn mv "#{i}" "#{newname}" `
 }

然后就做

 ./Upcase.rb foo.txt test.txt test2.txt foo/bar/test.txt 

或者如果你想做一个完整的目录

 find ./ -exec ./Upcase.rb {} + 
于 2008-10-14T00:09:47.697 回答
1

请注意,此更改会破坏 Windows 和 Mac 系统上的现有工作副本,因为它们无法处理仅大小写重命名。

于 2008-10-19T00:41:26.693 回答
0

我通常通过将“ls”输出重定向到一个文件来做到这一点,使用 vim 宏将每个文件名按摩到我想要的命令行中,然后将文件作为 shell 脚本执行。它很粗糙但很有效。

于 2008-10-13T23:53:14.393 回答