在使用Linux时,您可能会遇到一些仅使用小写文件名的实用程序和应用程序。我们通常不以这种格式保存文件,因此可能需要寻找一种解决方法,将文件夹中的所有文件名递归转换为小写。在本文中,我们将向您展示两种通过命令行将给定路径中的所有文件和文件夹名称转换为小写字母的方法。
我们已经在Ubuntu 18.04 LTS系统上运行了本文中提到的命令和过程。
这是使用find命令列出文件夹内容的方法:
$查找[directory_name]-深度
我的下载文件夹(我将作为本文的示例)包含所有以大写字母开头的文件,并且在名称之间还包含一些文件。
$ find Downloads -depth
方法1:使用重命名命令
在这种方法中,我们将使用Ubuntu find,Xargs和重命名命令来递归重命名给定目录中的所有文件/文件夹。
通过应用程序启动器搜索或Ctrl + Alt + T快捷键打开Ubuntu命令行终端。
这是您将使用的命令的语法:
$查找[directory_name]-深度| xargs -n 1重命名-v‘s /(.*)\/([^\/]*)/$ 1 \ /\ L $ 2 /’{} \;
如果您的系统上未安装重命名命令,则在运行上述命令时可能会出错。您可以通过以下apt-get命令将重命名安装到Ubuntu:
$ sudo apt-get install rename
我将使用以下命令将文件名转换为我的Downloads目录中的小写字母:
$ find Downloads -depth | xargs -n 1 rename -v 's/(.*)\/([^\/]*)/$1\/\L$2/' {} \;
当我再次列出目录的内容时,可以看到所有文件名转换为小写,如下所示:
方法2:使用脚本重命名文件
在此方法中,我们将使用bash脚本,该脚本使用find和mv命令,以便递归重命名目录的文件名和文件夹名,包括目录名本身。
打开终端应用程序,然后移动到bin文件夹,如下所示:
$ cd ~bin
现在,在您最喜欢的文本编辑器之一中打开一个新的脚本文件。我们将使用nano编辑器来打开名称为lowercase_filenames.sh的空脚本文件。
$ sudo nano lowercase_filenames.sh
在该空文件中,添加以下脚本。
#!/bin/bash
#print usage
if [ -z $1 ];then
echo "Usage :$(basename $0) parent-directory"
exit 1
fi
#process all subdirectories and files in parent directory
all="$(find $1 -depth)"
for name in ${all}; do
#set new name in lower case for files and directories
new_name="$(dirname "${name}")/$(basename "${name}" | tr '[A-Z]' '[a-z]')"
#check if new name already exists
if [ "${name}" != "${new_name}" ]; then
[ ! -e "${new_name}" ] && mv -T "${name}" "${new_name}"; echo "${name} was renamed to ${new_name}" || echo "${name} wasn't renamed!"
fi
done
exit 0
小费:您可以从此处复制它并使用Ctrl + Shift + V或right-click菜单中的“粘贴”选项将其粘贴到终端中,而不必在bash文件中键入整个脚本。
这是您文件的外观:
现在,通过Ctrl + X快捷键退出文件,然后将文件保存到“保存修改后的缓冲区?”输入Y,然后按Enter进行提示。
为了使此文件成为可执行脚本,请在终端中运行以下命令:
$ sudo chmod +x lowercase_filenames.sh
现在,您可以在任何文件夹上使用脚本了。
在“下载”文件夹上运行脚本时,我看到所有文件和子文件夹的名称都转换为小写,如下所示:
因此,这是通过两种方式可以将文件名重命名为所有小写字母,以使您使用的应用程序不会识别任何大写文件名。