Linux 如何在Subversion中将文件批量重命名为小写?
我们正在Linux服务器上运行subversion。我们组织中的一些人在需要全部使用小写字母时,用混合大小写重写了大约3k个文件 这在CLI中起作用Linux 如何在Subversion中将文件批量重命名为小写?,linux,svn,Linux,Svn,我们正在Linux服务器上运行subversion。我们组织中的一些人在需要全部使用小写字母时,用混合大小写重写了大约3k个文件 这在CLI中起作用 rename 'y/A-Z/a-z/' * 但很明显,这将破坏颠覆 svn rename 'y/A-Z/a-z/' * 不起作用,因为我想subversion处理重命名的方式不同。那么,如何将其作为批处理作业来执行呢?我很讨厌CLI,所以请解释一下,就像我是你的父母一样。手动重命名所有3k文件不是我希望承担的任务 谢谢 工作原理: 循环源文件
rename 'y/A-Z/a-z/' *
但很明显,这将破坏颠覆
svn rename 'y/A-Z/a-z/' *
不起作用,因为我想subversion处理重命名的方式不同。那么,如何将其作为批处理作业来执行呢?我很讨厌CLI,所以请解释一下,就像我是你的父母一样。手动重命名所有3k文件不是我希望承担的任务
谢谢
工作原理:
|
是非常常见的svn lowername.sh
(上面的一个小变体):
确保chmod+x svn lowername.sh
。然后执行:
find -name .svn -prune -o -type f -print0 | xargs -0 ./svn-lowername.sh
如果您认为此问题可能再次发生,请将svn lowername.sh
隐藏在路径中的某个位置(~/bin/
可能是一个好位置),然后在运行它时可能会丢失/
前缀
您也可以仅在一个目录上使用svn lowername.sh
,如下所示:
./svn-lowername.sh *
这有点老套,但适用于任意数量的嵌套目录:
find -mindepth 1 -name .svn -prune -o -print | (
while read file; do
svn mv "$file" "`perl -e 'print lc(shift)' "$file"`"
done
)
此外,您还可以恢复它们的提交。按四个管理线索可能是谨慎的。在Subversion中重命名需要两个步骤,一个
svn副本
,然后一个svn删除
,如果您想保留历史记录。如果使用svn move
将丢失文件的历史记录
虽然这个答案对你的问题没有帮助,但它将有助于防止这种情况再次发生。在Subversion存储库上的预提交钩子中实现脚本。下次有人尝试添加具有不同大小写的文件时,预提交钩子将不允许他们。该
*
不会在子目录中递归,但将执行@invertdspear的第一个示例所做的操作。他可能想找到代码>或类似内容。@Nathon:是的,我没有添加递归,因为“this works”示例不是递归的。谢谢你说的对递归不是必需的,但谢谢你提供了它。不知道svn rename被添加到了Subversion的可用命令列表中:,这不是svn move吗?我正在尝试你的第一个选项,肯定是出了问题,否则我就搞砸了。正如我所说,我不喜欢命令行,所以我没有正确的术语,但是当我输入您的示例并按enter键时,它会转到一个带有“>”的新行,因此我必须按住ctrl+c键才能返回提示。知道吗?我希望历史不是问题。您丢失了所有内容,重命名后将再次丢失所有内容。感谢您的关注,但历史记录不是问题,这是来自外部供应商的html文件转储,我们只是每季度更换一次。无法恢复其提交,因为这是来自外部供应商的更新转储。所以优先权是过时的文件。哦,杜德也刚刚退出,因此我现在必须修复它。这更好,因为它不依赖于shell将*
扩展到目录中的所有文件。这会在没有任何警告的情况下重载命令行。是的,命令行非常大,但是当它发生时,您只剩下一组部分重命名的文件,并且没有警告命令没有完成分配给它的任务。
./svn-lowername.sh *
find -mindepth 1 -name .svn -prune -o -print | (
while read file; do
svn mv "$file" "`perl -e 'print lc(shift)' "$file"`"
done
)