如何在bash下递归更改文件和文件夹的大小写

Dav*_*ean 0 linux shell bash rename mv

我有一些文件和文件夹都是大写的,我想将它们重命名为对应的小写字母。在 Linux 系统上用 bash 执行此操作的最佳方法是什么?

作为一个例子,我可能有:

.
|-- FOLDER0
|   |-- SUBFOLDERA
|   `-- SUBFOLDERB
`-- FOLDER1
    `-- AFILE.TXT
Run Code Online (Sandbox Code Playgroud)

我想将其转换为:

.
|-- folder0
|   |-- subfoldera
|   `-- subfolderb
`-- folder1
    `-- afile.txt
Run Code Online (Sandbox Code Playgroud)

我可能可以编写一个深度优先递归脚本来执行此操作(深度优先以确保文件和子文件夹在其父文件夹之前重命名),但我想知道是否有更好的方法。rename可能有用,但它似乎不支持递归。

小智 5

find . -depth -print0 | xargs -0 rename -n '$_ = lc $_'
Run Code Online (Sandbox Code Playgroud)

一旦你确定它正在做你想做的事,就取出 -n 标志。

  • 你应该使用 `find` 的 `-depth` 选项。 (2认同)
  • 请注意,在某些发行版(尤其是 Fedora/Redhat)上重命名并不是有用的 perl 版本 - 所以这将不起作用。 (2认同)