Linux:如何将目录中的所有文件重命名为大写?

Noo*_*oob 0 linux shell awk rename sed

包括扩展。例如 file.txt --> FILE.TXT

如果有人能指出我的大致方向,那么我将不胜感激:)


这里只是一些随机文本,因为字符数对于 Stackoverflow 来说太低了......

Per*_*-lk 5

最初的解决方案是:

rename 'y/a-z/A-Z/' *
Run Code Online (Sandbox Code Playgroud)

它获取当前目录中的每个文件/目录,并将 az 范围内的每个字符更改为其相应的大写版本。

问题rename是没有选项可以进入目录内部以递归地应用重命名,并且*字符会扩展为当前目录(文件和目录)的名称。更重要的是,此命令还会重命名目录,但您只想重命名文件。

要递归地执行此操作,但仅对文件进行操作,您可以使用find,它会递归搜索,并将每个文件传递给rename

find . -type f -execdir rename 'y/a-z/A-Z/' {} \;
Run Code Online (Sandbox Code Playgroud)

此命令仅搜索文件,并对找到该文件的rename目录(选项)内的每个文件执行。execdir这很重要,因为否则find会将文件的完整路径(例如:./fold1/fold2/file.txt')传递给rename,而后者又会尝试将完整路径传递为大写: (./FOLD1/FOLD2/FILE.txt) TXT) 这将导致错误,因为文件夹FOLD1FOLD2不存在。