【发布时间】:2010-09-17 00:01:40
【问题描述】:
我需要更改颠覆工作副本中一组文件的大小写,如下所示:
svn mv test.txt 测试.txt svn mv test2.txt Test2.txt svn mv testn.txt Testn.txt ... svn commit -m "大写"如何使这个过程自动化?提供标准的 linux 安装工具。
【问题讨论】:
标签: svn shell file batch-file rename
我需要更改颠覆工作副本中一组文件的大小写,如下所示:
svn mv test.txt 测试.txt svn mv test2.txt Test2.txt svn mv testn.txt Testn.txt ... svn commit -m "大写"如何使这个过程自动化?提供标准的 linux 安装工具。
【问题讨论】:
标签: svn shell file batch-file rename
请注意,此更改会破坏 Windows 和 Mac 系统上的现有工作副本,因为它们无法处理仅大小写重命名。
【讨论】:
我认为使用 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 {} +
【讨论】:
ls | awk '{system("svn mv " $0 " " toupper(substr($0,1,1)) substr($0,2))}'
显然,其他脚本语言也可以正常工作。 awk 的优势在于它无处不在。
【讨论】:
如果你有一个不错的安装,你应该有 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
【讨论】:
我通常通过将 'ls' 输出重定向到文件来执行此操作,使用 vim 宏将每个文件名按摩到我想要的命令行中,然后将文件作为 shell 脚本执行。它很粗糙但很有效。
【讨论】: