当前位置: 首页>>技术教程>>正文


批量重命名文件为小写

, ,

问题描述

有没有办法将目录中的所有文件重命名为小写|大写?

我正在寻找一个单行命令。

我喜欢 TotalCommander 的 Alt + F7 ,现在我需要终端中的该功能。

最佳方法

对于当前目录中的每个文件 a_file,将 a_file 重命名为小写。

for a_file in *;do mv -v "$a_file" `echo "$a_file" | tr [:upper:] [:lower:]` ;done;

对于大写,将参数反转为 [:lower:] [:upper:]

tr 命令参考 link

更新

为了获得更多控制,可以将 * 替换为 ls

例如在包含 1.txt、2.txt、3.txt、1.jpg、2.jpg 和 3.jpg 的目录中,为了仅过滤 *.jpg 文件,可以使用 ls

for a_file in $(ls *.jpg);do mv -v $a_file `echo $a_file | tr [:upper:] [:lower:]` ;done;

上述代码将把所有带有 .jpg 扩展名的文件分配给 a_file 变量。

按照 sds 的建议,将 -v 选项更新至 mv 命令。

次佳方法

有一个更优雅和通用的实用程序称为 prename

由 Larry Wall 编写,它与 perl 一起提供,因此很可能已经在您的系统中以 /usr/bin/prename 的形式提供(如果您有设置替代方案,它也可能以 /usr/bin/rename 的形式提供,通过 /etc/alternatives 符号链接到 prename )

使用它,您可以通过提供任何 perl 表达式(包括但不限于替换 s/// 或 char 音译 tr/// )在一个命令中重命名多个文件:

例子:

# Lowercase all *.JPG filenames:
prename tr/A-Z/a-z/ *.JPG

# Change any 'No' in a filename to a 'Yes':
prename s/No/Yes/g *No*

# increment first sequence of digits in a filename by 3:
prename 's/([0-9]+)/$1+3/e' *[0-9]*

# If a file contains 'aaa', append '.bak' to its name
prename 'if (/aaa/) {$_ .= ".bak"}'  *

等等。

prename 的另一个好处是,在将文件重命名为现有文件名时,它可以保护您。

man prename 了解更多详情。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/14493.html,未经允许,请勿转载。