我必须递归地重命名完整的文件夹树,这样就不会出现大写字母(它是C++源代码,但这不重要).

忽略CVS和Subversion版本控制文件/文件夹的额外积分.首选的方式是shell脚本,因为shell应该可以在任何Linux机器上使用.

关于文件重命名的细节,存在一些有效的论点.

  1. 我认为小写名称相同的文件应该被覆盖;这是用户的问题.当在忽略文件系统的情况下签出时,它也会用后者覆盖第一个文件系统.

  2. 我会考虑AZ字符,并将它们转换成AZ,其他所有的东西都只是在调用问题(至少是源代码).

  3. 在Linux系统上运行构建需要这个脚本,所以我认为应该忽略对CVS或Subversion版本控制文件的更改.毕竟,这只是一个临时结帐.也许"出口"更合适.

推荐答案

使用"rename"命令的简明版本:

find my_root_dir -depth -exec rename 's/(.*)\/([^\/]*)/$1\/\L$2/' {} \;

这样可以避免在文件之前重命名目录,并try 将文件移动到不存在的目录中(例如,将"A/A"移动到"a/a").

或者,不使用"rename"的更详细版本.

for SRC in `find my_root_dir -depth`
do
    DST=`dirname "${SRC}"`/`basename "${SRC}" | tr '[A-Z]' '[a-z]'`
    if [ "${SRC}" != "${DST}" ]
    then
        [ ! -e "${DST}" ] && mv -T "${SRC}" "${DST}" || echo "${SRC} was not renamed"
    fi
done

附笔.

后者允许更灵活地使用move命令(例如,"svn mv").

Linux相关问答推荐

如何删除字符串中的`{{i:`and `}}`

列出Linux上特定目录和子目录名称的bash命令

如何创建一堆文件中所有单词的列表?

Linux内核模块构建过程中,许可信息添加了前缀

Qt会泄漏内存吗?

为什么 liburing 写入性能低于预期?

替换前 3 个字符范围内的所有整数

如何让 Flutter 用鼠标拖动而不是滚轮滚动? (Linux)

`G++ 4.9.4` 中关于 WEXITSTATUS 的奇怪行为

是否可以在 XTerm 或 Konsole 中使 stdout 和 stderr 输出具有不同的 colored颜色 ?

内核是如何工作的?

如何使用 gcc 编译为程序集

打印当前一周的星期一的日期(在 bash 中)

`是什么意思! -d` 在这个 Bash 命令中?

linux中netstat和ss的区别?

如何让 cron 每N分钟运行一次,其中 n % 5 == 1?

Linux命令将一个文件复制到多个文件

Linux SCHED_OTHER、SCHED_FIFO 和 SCHED_RR - 区别

CentOS:在 PHP 安装中启用 GD 支持

如何使用cp从不同目录复制多个文件?