使用 'svn mv' 在 bash 中将目录中的每个文件大写

Posted

技术标签:

【中文标题】使用 \'svn mv\' 在 bash 中将目录中的每个文件大写【英文标题】:Capitalize every file in a directory, in bash, using 'svn mv'使用 'svn mv' 在 bash 中将目录中的每个文件大写 【发布时间】: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 安装工具。

【问题讨论】:

【参考方案1】:

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

【讨论】:

在 Subversion = 1.7 的情况下,更新带来的更改可能会注意到一些障碍,但您可以从这种状态中恢复,而不会破坏您的工作副本。【参考方案2】:

我认为使用 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  + 

【讨论】:

【参考方案3】:

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

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

【讨论】:

完美,正是我正在寻找的一种衬垫!【参考方案4】:

如果你有一个不错的安装,你应该有 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

【讨论】:

name.capitalize(),而不是upper() 这将取决于想要什么,如果他想要“文件名”,那么是的,你是对的,但是我认为需要“文件名”,在这种情况下我是正确的。 如果您阅读他的问题,很明显他想要“文件名”而不是“文件名”。【参考方案5】:

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

【讨论】:

以上是关于使用 'svn mv' 在 bash 中将目录中的每个文件大写的主要内容,如果未能解决你的问题,请参考以下文章

如何在bash中将所有子目录中的所有文件gzip到一个压缩文件中

-bash: /bin/mv: Argument list too long

当使用 svn cp 或 svn mv 时,如何使 svn diff 生成将应用补丁的文件?

无法在Bash中使用变量分配另一个变量

android studio中使用svn

在带有 mv 的 bash 中使用正则表达式