在Ubuntu中将所有子目录中的文件名更改为小写

15 浏览
0 Comments

在Ubuntu中将所有子目录中的文件名更改为小写

我知道这个问题已经被问过了,但迄今为止我所找到的方法都没有奏效。

我找到的最接近的方法是:rename -n 'y[A-Z]/[a-z]/' *

这个方法适用于当前目录。由于我对Linux终端不太熟悉,我应该在这个命令中添加什么来将其应用于我所在的所有子目录中的所有文件呢?谢谢!

0
0 Comments

在Ubuntu中将文件名更改为小写的问题是由于文件名中包含大写字母而导致的。解决方法是使用find命令和tr命令来实现。

以下是使用find和tr的一种方法:

for i in $(find . -type f -name "*[A-Z]*"); do mv "$i" "$(echo $i | tr A-Z a-z)"; done

这个命令会遍历当前目录及其所有子目录中的所有文件,找到文件名中包含大写字母的文件,并将其重命名为小写字母。

如果在文件中只找到包含小写字母的文件并移动到相同的文件中,mv命令将显示"are the same file"错误。为了避免这种情况,需要添加"-name "*[A-Z]*""选项,确保只找到文件名中包含大写字母的文件。

有人问是否可以在Ubuntu中关闭大小写敏感性。答案是否定的,Unix文件系统是大小写敏感的,无法通过设置来关闭大小写敏感性。如果源代码中存在大小写错误,需要手动修复。

在目录中包含大写字母的情况下,上述方法无法正常工作,mv命令会失败,因为目标文件不存在。

此外,应添加一个警告,如果文件名相同(例如,"Foo"与"FOO"),则会删除一些文件。最好在这种情况下发出警告。

另外,为了让命令在文件名中包含空格的情况下正常工作,需要将IFS变量设置为$'\n'。完整的命令如下:

IFS=$'\n' && for i in $(find . -type f -name "*[A-Z]*"); do echo "$i" "$(echo "$i" | tr A-Z a-z)"; done ; unset IFS

通过使用上述方法,可以在Ubuntu中将文件名更改为小写,并解决文件名中包含大写字母的问题。

0
0 Comments

问题:在Ubuntu中,如何将所有子目录中的文件名更改为小写?

原因:使用Perl的lc()函数可以更好地处理文件名的大小写转换。这个脚本可以处理文件名中的空格,但不能处理换行符。如果存在"ASDF.txt"和"asdf.txt"这样的文件名,会导致文件被覆盖。

解决方法:

1. 打开终端。

2. 输入以下命令:

find . -type f | perl -n -e 'chomp; system("mv", $_, lc($_))'

3. 执行命令后,所有子目录中的文件名将会转换为小写。注意,如果存在同名但大小写不同的文件,其中一个文件将会被覆盖。

0