当前位置:  开发笔记 > 编程语言 > 正文

如何在Linux上将所有文件夹和文件重命名为小写?

如何解决《如何在Linux上将所有文件夹和文件重命名为小写?》经验,为你挑选了8个好方法。

我必须递归地重命名一个完整的文件夹树,这样就不会出现任何大写字母(它是C++源代码,但这无关紧要).忽略CVS和SVN控制文件/文件夹的加分点.首选方法是shell脚本,因为shell应该可以在任何Linux机器上使用.

关于文件重命名的细节有一些有效的论据.

    我认为应该覆盖具有相同小写名称的文件,这是用户的问题.当检出案例忽略文件时,系统也会用后者覆盖第一个文件系统.

    我会考虑AZ字符并将它们转换为az,其他一切只是要求问题(至少使用源代码).

    在Linux系统上运行构建需要脚本,因此我认为应该省略对CVS或SVN控制文件的更改.毕竟,这只是一个划痕结账.也许"出口"更合适.

tristanbaile.. 247

更小仍然我很喜欢

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

在不区分大小写的文件系统(如OS X的HFS +)上,您需要添加-f标志

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

+1.这个确切的例子在重命名的手册页中给出. (8认同)

在Arch上,该程序被称为`perl-rename`(由具有相同名称的包提供) (8认同)

这假设你有perls重命名,但并非总是如此.例如,我的debian重命名是完全不同的 (4认同)

http://linux.icydog.net/rename.php:`Ubuntu默认使用的重命名实用程序是Perl程序,有时称为prename. (3认同)

由于"重命名"不是递归的,因此这不能解决给定的问题. (2认同)


Alex B.. 166

使用"rename"命令的简洁版本.

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

这避免了在文件之前重命名目录并尝试将文件移动到不存在的目录(例如,"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

PS

后者允许移动命令更灵活(例如"svn mv").



1> tristanbaile..:

更小仍然我很喜欢

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

在不区分大小写的文件系统(如OS X的HFS +)上,您需要添加-f标志

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


+1.这个确切的例子在重命名的手册页中给出.
在Arch上,该程序被称为`perl-rename`(由具有相同名称的包提供)
这假设你有perls重命名,但并非总是如此.例如,我的debian重命名是完全不同的
http://linux.icydog.net/rename.php:`Ubuntu默认使用的重命名实用程序是Perl程序,有时称为prename.
由于"重命名"不是递归的,因此这不能解决给定的问题.

2> Alex B..:

使用"rename"命令的简洁版本.

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

这避免了在文件之前重命名目录并尝试将文件移动到不存在的目录(例如,"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

PS

后者允许移动命令更灵活(例如"svn mv").


使用重命名可以通过这种方式重命名'y/AZ/az /'*
对于包含空格的文件(context:linux,bash),第二种方法对我来说无法正常工作.
使用最后一个版本的重命名,不需要正则表达式.完整命令变为`find my_root_dir -depth -exec rename -c {} \;`.如果您使用不区分大小写的文件系统(例如Mac),请添加-f以重命名
请注意,这两个版本都不适用于不区分大小写的文件系统.在我的情况下,我用'(mv"$ {SRC}""$ {DST} .renametmp"&& mv"$ {DST} .renametmp""$ {DST}")||替换`then`封闭的行.echo"$ {SRC}未重命名为"`.

3> Swaroop C H..:
for f in `find`; do mv -v "$f" "`echo $f | tr '[A-Z]' '[a-z]'`"; done


来自所有注释的“合并”版本(答案无法再编辑):做mv -v“ $ f”“`echo $ f | tr'[AZ]''[az]'`”; 完成```
“ find”应该替换为您用来获取要重命名文件列表的任何命令;例如“ ls *。{C,CPP,H}”。
在OS X上不起作用,仅显示`find`的使用情况信息。查找。似乎可以解决此问题。

4> Ginhing..:

如果您不需要关心效率,只需尝试按照即可.

zip -r foo.zip foo/*
unzip -LL foo.zip


假设当你发现自己需要重命名目录中的文件时,计算效率通常不是问题...我认为这可能是这个线程上最具创造性的简单解决方案.实际上,这个微不足道的东西不应该像接受的答案那样复杂,而且这种解决方法与我想要在这样的操作中投入的思想量相比更加成比例.+1000
您可以使用`-0`(即'零',无压缩)开关来加速它,`zip -0 -r foo.zip foo /`.
哇,这是一种非常低效的方式.
我不得不在不同的目录结构中更改超过50'000个文件名.原来接受的答案在2分钟内完成了不到10%的工作,其中"-0"压缩几乎是即时的!
这不仅效率低下。如果没有足够的可用空间来存储临时存档,那么这简直是“不可能”。

5> niXar..:

上面的大多数答案都很危险,因为它们不处理包含奇数字符的名称.对于这类事情,你最安全的选择是使用find的-print0选项,它将使用ascii NUL而不是\n来终止文件名.在这里,我提交了这个脚本,它只改变文件而不是目录名,以免混淆find.

find .  -type f -print0 | xargs -0n 1 bash -c \
's=$(dirname "$0")/$(basename "$0");
d=$(dirname "$0")/$(basename "$0"|tr "[A-Z]" "[a-z]"); mv -f "$s" "$d"'

我测试了它,它适用于包含空格,各种引号等的文件名.这很重要,因为如果你以root身份运行树上包含由以下内容创建的文件的其他脚本之一:

touch \;\ echo\ hacker::0:0:hacker:\$\'\057\'root:\$\'\057\'bin\$\'\057\'bash

......好吧猜猜......



6> Stephen..:

男人,你们喜欢复杂的事情..

重命名'y/AZ/az /'*



7> alemol..:

如果您已经拥有或设置了重命名命令(例如通过Mac中的brew安装),则此方法有效:

rename --lower-case --force somedir/*


...如果你先设置重命名,例如通过`brew install rename`
重命名'y/AZ/az /'*
`--lower-case`?遗憾的是,至少在Arch Linux中并非如此.
`rename`不是bash内置的.它是一个外部实用程序,语法因您安装的版本而异.这个答案不足以作为所要求的"适用于所有基于unix的OS"的便携式解决方案.

8> Pere..:

这适用于没有renamePerl脚本的CentOS/Redhat或其他发行版:

for i in $( ls | grep [A-Z] ); do mv -i "$i" "`echo $i | tr 'A-Z' 'a-z'`"; done

来源:https://linuxconfig.org/rename-all-files-from-uppercase-to-lowercase-characters

(在某些发行版中,默认rename命令来自util-linux,这是一个不同的,不兼容的工具)

推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有