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

n53p2ov0  于 2022-12-03  发布在  Linux
关注(0)|答案(3)|浏览(149)

我们在一个Linux服务器上运行subversion。我们组织中的某个人用混合大小写覆盖了大约3k的文件,当它们需要全部小写时。
这在CLI中有效

rename 'y/A-Z/a-z/' *

但显然会搞砸颠覆。

svn rename 'y/A-Z/a-z/' *

不工作,因为subversion处理重命名不同,我猜.所以我怎么能做这个作为一个批处理作业?我吸与CLI,所以请解释它像我是你的父母.手动重命名所有3k文件不是一个任务,我希望承担.
谢谢

myss37ts

myss37ts1#

创建一个小脚本svn-lowername.sh

#!/bin/bash
# svn rename each supplied file with its lowercase
for src; do
    dst="$(dirname "$src")/$(basename "$src" | tr '[A-Z]' '[a-z]')"
    [ "$src" = "$dst" ] || svn rename "$src" "$dst"
done

确保chmod +x svn-lowername.sh。然后执行:
工作原理:
1.循环遍历每个提供的文件名。
1.文件名的基本名部分是小写的,目录部分则保持不变,使用tr进行逐个字符的转换。(如果需要支持非ASCII字母,则需要进行更精细的Map。)
1.如果源文件名和目标文件名相同,我们就可以了,否则,svn rename。(您可以使用if语句来代替,但是对于单行条件语句,使用||是非常惯用的。)
您可以对目录中的所有文件使用此选项:

./svn-lowername.sh *

...或者如果您想递归执行:

find -name .svn -prune -o -type f -print0 | xargs -0 ./svn-lowername.sh

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

fkvaft9z

fkvaft9z2#

这有点笨拙,但应该可以用于任意数量的嵌套目录:

find -mindepth 1 -name .svn -prune -o -print | (
    while read file; do
        svn mv "$file" "`perl -e 'print lc(shift)' "$file"`"
    done
)

此外,您也可以还原他们的提交。谨慎的做法可能是以4为单位管理线索。

mefy6pfw

mefy6pfw3#

在Subversion中重命名需要两个步骤,如果你想保留历史记录,一个svn copy接着一个svn delete.如果你使用svn move,你会丢失文件的历史记录.
虽然这个答案对你的问题没有帮助,但它可以帮助你避免这种情况再次发生.在Subversion仓库的pre-commit钩子中实现case-insenstive.py脚本,下次有人试图添加大小写不同的文件时,pre-commit钩子不会允许.

相关问题