【问题标题】:Change filenames to lowercase in Ubuntu in all subdirectories [closed]在所有子目录中的Ubuntu中将文件名更改为小写[关闭]
【发布时间】:2012-10-14 15:35:50
【问题描述】:

我知道有人问过,但到目前为止我发现的还没有解决。 我来的壁橱是这样的:rename -n 'y[A-Z]/[a-z]/' * 适用于当前目录。我不太擅长 Linux 终端,那又怎样 我是否应该添加到此命令以将其应用于我所在的所有子目录中的所有文件,谢谢!

【问题讨论】:

  • 这是关闭的主题,但它有我找到的这个确切问题的最佳答案。这在哪里更合适,它是否存在?
  • @AndrewLott unix.SE 或 superuser.com

标签: linux ubuntu terminal rename


【解决方案1】:

这是使用findtr 的一种方法:

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

编辑;补充:-name "*[A-Z]*"

这样可以确保只找到带有大写字母的文件。例如,如果找到只有小写字母的文件并将其移动到同一个文件中,mv 将显示are the same file 错误。

【讨论】:

  • 我要试试这个,但我刚刚注意到 php 文件中的 require 调用在大量文件中是大写和小写的。有没有办法在 Ubuntu 中关闭区分大小写?
  • 没有。 Unix 文件系统区分大小写,没有设置将其关闭。我想您可以从 FAT32 文件系统运行您的应用程序作为一种解决方法,但如果您的源代码有案例错误,则需要手动修复它们。
  • 如果目录包含大写字符,这不起作用; mv 失败,因为新目的地不存在
  • 你还应该添加一个警告,如果它们具有相同的名称(例如,FooFOO),这会删除一些文件。理想情况下,它会在这种情况下发出警告。
  • 另外,为了让它与空格一起工作,它应该是IFS=$'\n' && for i in $(find . -type f -name "*[A-Z]*"); do echo "$i" "$(echo "$i" | tr A-Z a-z)"; done ; unset IFS
【解决方案2】:

Perl 有一个可识别区域设置的 lc() 函数,它可能会更好地工作:

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

请注意,此脚本处理文件名中的空格,但不处理换行符。并且没有防止碰撞的保护,如果你有“ASDF.txt”和“asdf.txt”,一个会被破坏。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-18
    • 2015-11-17
    • 1970-01-01
    • 2021-04-11
    • 2014-07-29
    • 1970-01-01
    • 2021-10-08
    相关资源
    最近更新 更多