如何在Subversion中将文件批量重命名为小写?

inv*_*ear 7 linux svn

我们在Linux服务器上运行subversion.当他们需要全部小写时,我们组织中的某人用大小写混合了约3k文件.

这适用于CLI

rename 'y/A-Z/a-z/' *
Run Code Online (Sandbox Code Playgroud)

但显然会搞砸颠覆.

svn rename 'y/A-Z/a-z/' * 
Run Code Online (Sandbox Code Playgroud)

不起作用,因为subversion处理重命名我猜.那么我怎么能做这个批处理工作呢?我很熟悉CLI,所以请解释一下我就像你的父母一样.手动重命名所有3k文件不是我想要承担的任务.

谢谢

Lau*_*ves 7

for src in *; do
    dst=$(echo "$src" | tr '[A-Z]' '[a-z]')
    [ "$src" = "$dst ] || svn rename "$src" "$dst"
done
Run Code Online (Sandbox Code Playgroud)

这个怎么运作:

  1. 循环遍历源文件名.
  2. 目标文件名是小写的源文件名.tr进行逐字符翻译.
  3. 如果源文件名和目标文件名相同,我们没关系,否则,svn重命名.您可以使用if语句,但对于单行条件使用||非常常见.

如果你需要递归,你可以创建一个小脚本svn-lowername.sh(上面的一个小变体):

#!/bin/bash
for src; do
    dst=$(echo "$src" | tr '[A-Z]' '[a-z]')
    [ "$src" = "$dst" ] || svn rename "$src" "$dst"
done
Run Code Online (Sandbox Code Playgroud)

一定要chmod +x svn-lowername.sh.然后执行:

find -name .svn -prune -o -type f -print0 | xargs -0 ./svn-lowername.sh
Run Code Online (Sandbox Code Playgroud)

如果您认为这个问题可能会再次发生,svn-lowername.sh请将您的路径隐藏在某个地方(~/bin/可能是一个好地方),然后您可以./在运行它时丢失该前缀.

你也可以svn-lowername.sh像这样在一个目录上使用:

./svn-lowername.sh *
Run Code Online (Sandbox Code Playgroud)